我有一個設置,其中在後臺線程我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中添加的新對象?
是的,我有: ... self.fetchedResultsController.delegate =自我; assert(self.fetchedResultsController.delegate == self); .... – devQry
我也改變了我的呼籲mergeChangesFromContextDidSaveNotification: 成爲: dispatch_async(dispatch_get_main_queue()^ { [self.managedObjectContext mergeChangesFromContextDidSaveNotification:通知符]; }); 但是,遺憾的是,無濟於事: – devQry
我切換到新的(iOS 5 ++)NSMainQueueConcurrencyType和NSPrivateQueueConcurrencyType MOCs,將背景MOC的parentContext設置爲前景MOC,完全擺脫了通知和合並方法 調用 [parentContext performBlock:^ { NSError * EP =零;如果 (![parentContext節省:EP]){// ... } }]; 在後臺孩子上下文保存後,一切正常如預期。 – devQry