如何观察是否从managedObjectContext中删除了NSManagedObject

时间:2013-08-24 23:03:03

标签: ios core-data

我在应用程序中的某个时刻(并加载另一个商店)和reset我的managedObjectContext从persistentStoreCoordinator中删除了persistentStore。 当我这样做时,根据文档,我还需要删除对已经获取的托管对象的所有引用:

  

所有接收者的管理对象都被“遗忘”。如果你使用它   方法,你应该       确保您还放弃对使用接收器获取的任何管理对象的引用,
      因为之后它们将无效。

我想避免必须遍历所有fetchedResultsControllers,缓存,可能包含managedObjects的数组,也存储对象的详细视图等。

相反,我更愿意观察托管对象的isInserted状态是否发生变化。像

这样的东西
[myObject addObserver:self
           forKeyPath:@"isInserted"
              options:0
              context:nil];

不幸的是,这似乎不起作用。

那么 - 如何从managedObjectContext中删除NSManagedObject?

3 个答案:

答案 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"或其他内容。在使用托管对象的任何控制器中观察此通知。收到该通知后,请清理所有本地参考。