我在应用程序中的某个时刻(并加载另一个商店)和reset
我的managedObjectContext从persistentStoreCoordinator中删除了persistentStore。
当我这样做时,根据文档,我还需要删除对已经获取的托管对象的所有引用:
所有接收者的管理对象都被“遗忘”。如果你使用它 方法,你应该 确保您还放弃对使用接收器获取的任何管理对象的引用,
因为之后它们将无效。
我想避免必须遍历所有fetchedResultsControllers,缓存,可能包含managedObjects的数组,也存储对象的详细视图等。
相反,我更愿意观察托管对象的isInserted
状态是否发生变化。像
[myObject addObserver:self
forKeyPath:@"isInserted"
options:0
context:nil];
不幸的是,这似乎不起作用。
那么 - 如何从managedObjectContext中删除NSManagedObject?
答案 0 :(得分:3)
使用NSNotificationCenter
观察NSManagedObjectContextObjectsDidChangeNotification
消息,然后检查deletedObjects
的{{1}}方法。有关详细信息,请参阅文档:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#//apple_ref/occ/instm/NSManagedObjectContext/deletedObjects
答案 1 :(得分:0)
我发现在我的情况下观察NSPersistentStoreCoordinatorStoresDidChangeNotification
的效果非常好。
它被调用两次 - 第一次,当删除旧的持久存储时,第二次添加新的存储时。
我仍在测试这个解决方案对我的案子的证明比尼古拉斯建议的更好。
答案 2 :(得分:0)
没有内置的通知或更改,你可以观察到它真正做你想要的。但是建立自己的很容易。当您完成删除持久性存储并重置上下文的过程时,请发布您自己的通知 - @"MyAppCoreDataExploded"
或其他内容。在使用托管对象的任何控制器中观察此通知。收到该通知后,请清理所有本地参考。