我有一个与 iCloudCoreDataRecipes 示例非常相似的应用程序设置(即,将 Core Data 与 iCloud 结合使用)。在应用程序委托中,我观察到
NSPersistentStoreDidImportUbiquitousContentChangesNotification
当通知到达时,我打电话
[context mergeChangesFromContextDidSaveNotification:note];
当收到此通知时,我想做一些额外的处理,但在使用 NSDeletedObjectsKey 集中存在的 NSManagedObjectID 标识的对象时遇到问题。
NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
for (NSManagedObjectID *oid in deletedObjects) {
NSManagedObject *obj = [context objectWithID:oid];
}
如果我访问obj上的任何属性,则为 nil。
然后我尝试在调用 mergeChangesFromContextDidSaveNotification 之前运行上述代码:
当我这样做时,大部分时间我都能够访问对象的属性。在某些情况下,我会因为无法完成故障而获得例外;该记录已从 Core Data 存储中删除。
我意识到,如果在通知到达之前某个时间已经将对象加载到上下文中(即,如果在应用程序中查看/访问了该对象),则访问已删除对象的属性将起作用。
我的问题是我想做一些与已删除对象相关的清理工作;我的 NSManagedObject 有一个我想读取的属性,然后用它来执行与该值相关的核心数据之外的一些工作。
我错过了什么?是否有可能做到这一点?