2

我有一个与 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 有一个我想读取的属性,然后用它来执行与该值相关的核心数据之外的一些工作。

我错过了什么?是否有可能做到这一点?

4

1 回答 1

2

你可能应该看看

- (void)prepareForDeletion;

并在您的子类中覆盖它NSManagedObject

于 2012-07-05T12:43:14.997 回答