我有一个应用程序,其设置与 iCloudCoreDataRecipes 示例非常相似(即,将 Core Data 与 iCloud 结合使用)。在应用程序委托(delegate)中,我观察到
NSPersistentStoreDidImportUbiquitousContentChangesNotification
当通知到达时,我打电话
[context mergeChangesFromContextDidSaveNotification:note];
当收到此通知时,我想要执行一些额外的处理,但在使用由 NSDeletedObjectsKey 集中存在的 NSManagedObjectID 标识的对象时遇到问题。
NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
for (NSManagedObjectID *oid in deletedObjects) {
NSManagedObject *obj = [context objectWithID:oid];
}
如果我访问 obj 上的任何属性,它为零。
然后,我尝试在调用 mergeChangesFromContextDidSaveNotification 之前运行上述代码:
当我这样做时,大多数时候我能够访问对象的属性。在某些情况下,我会收到无法履行错误的异常;该记录已从核心数据存储中删除。
我意识到,如果在通知到达之前某个时间将对象加载到上下文中(即,如果在应用程序内查看/访问了该对象),则访问已删除对象的属性将起作用。
我的问题是我想做一些与已删除对象相关的清理工作;我的 NSManagedObject 有一个属性,我想读取该属性,然后用它来执行与该值相关的核心数据之外的一些工作。
我错过了什么?可以这样做吗?
最佳答案
你可能应该看看
- (void)prepareForDeletion;
并在您的NSManagedObject
子类中覆盖它。
关于objective-c - 访问 iCloud 通知中已删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317455/