1

我有一個設置,其中在後臺線程我managedObjectContext一個保存新的對象,在TableViewController我聽NSManagedObjectContextDidSaveNotification和處理這樣的通知:將mergeChangesFromContextDidSaveNotification觸發fetchedResultsController的objectsChanged:委託方法?

- (void) refreshData:(NSNotification *)notif { 
    assert([[self fetchedResultsController] managedObjectContext] == self.managedObjectContext); 
    if ([notif object] != self.managedObjectContext) { 
     [self.managedObjectContext mergeChangesFromContextDidSaveNotification:notif]; 
    } 
} 

self.managedObjectContext是MOC B,連接到同一個NSPersistentStoreCoordinator作爲MOC A(線程約束模式1)。

的TableViewController是MOC B.一個NSFetchedResultsController讀取數據的委託

我發現,委託方法controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:controllerDidChangeContent:沒有得到來自商務部A.收到通知後稱爲

我將不得不重新獲取MOC B的fetchedResultsController中的數據以查看MOC A中添加的新對象?

回答

1

devQry,

您當然有設置獲取結果控制器委託嗎?沒有那樣做,什麼都不可能被調用。

安德魯

+0

是的,我有: ... self.fetchedResultsController.delegate =自我; assert(self.fetchedResultsController.delegate == self); .... – devQry

+0

我也改變了我的呼籲mergeChangesFromContextDidSaveNotification: 成爲: dispatch_async(dispatch_get_main_queue()^ { [self.managedObjectContext mergeChangesFromContextDidSaveNotification:通知符]; }); 但是,遺憾的是,無濟於事: – devQry

+0

我切換到新的(iOS 5 ++)NSMainQueueConcurrencyType和NSPrivateQueueConcurrencyType MOCs,將背景MOC的parentContext設置爲前景MOC,完全擺脫了通知和合並方法 調用 [parentContext performBlock:^ { NSError * EP =零;如果 (![parentContext節省:EP]){// ... } }]; 在後臺孩子上下文保存後,一切正常如預期。 – devQry