3 回答

TA貢獻1998條經驗 獲得超6個贊
事實證明,更新對象NSManagedObjectContext沒有主事件觸發NSManagedObjectContextObjectsDidChangeNotification,因為故障對象未完成觸發。
通用修復(或跟蹤需要此處理的對象ID):
NSManagedObjectContext *context = [self managedObjectContext];
for(NSManagedObject *object in [[notification userInfo] objectForKey:NSUpdatedObjectsKey]) {
[[context objectWithID:[object objectID]] willAccessValueForKey:nil];
}
[context mergeChangesFromContextDidSaveNotification:notification];
從NSManagedObject類參考:
您可以使用鍵值nil調用此方法,以確保已引發故障,如以下示例所示。

TA貢獻1784條經驗 獲得超9個贊
從另一個NSManagedObjectContext合并更改后,必須在Background-NSManagedObjectContext上調用processPendingChanges。
請參閱《 CoreData編程指南》:
請注意,更改通知是通過NSManagedObjectContext的processPendingChanges方法發送的。主線程與應用程序的事件周期綁定在一起,以便在主線程擁有的上下文中的每個用戶事件發生后,自動調用processPendingChanges。后臺線程不是這種情況-調用方法時取決于平臺和發行版,因此您不應依賴特定的時間。如果輔助上下文不在主線程上,則應在適當的時候自己調用processPendingChanges。

TA貢獻1828條經驗 獲得超6個贊
聽起來好像您正在后臺線程上進行合并。更改的合并需要在main / UI線程上完成,事件才能正確觸發。但是,如果您使用父/子MOC,因為它們在內部處理這些通知,那么這沒有什么意義。
- 3 回答
- 0 關注
- 471 瀏覽
添加回答
舉報