【发布时间】:2012-06-28 15:46:23
【问题描述】:
我正在开发一个应用程序,我需要在后台线程上计算事物(多秒操作)和写入事物(与服务器同步数据)。
因此,我使用了两个 NSManagedObjectContexts (MOC),一个子对象和一个父对象,它们必须始终保持同步。为确保它们同步,我总是将数据编辑/添加到子 MOC,以便使用以下模式将其推送到主 MOC:
[childMOC performBlock:^{
MyObject *myObject = *create new object in childMOC*
[childMOC save:&error];
[mainMOC performBlock:^{
[mainMOC save:&error];
// Is this mandatory to make it work correctly?
// [childMOC performBlock:^{
// [childMOC refreshObject:myObject mergeChanges:NO];
// }];
}];
}];
过了一会儿,我在后台上下文中似乎有同一个对象的两个版本,一个具有临时 ID,另一个具有永久 ID。如果我例如将子对象添加到“真实”对象(通过将新的永久 ID 从主 MOC 传递给子 MOC)我在后台 MOC 中检索对象时没有看到这些对象,因为它是缓存的旧临时对象。
我已经看到上面的模式被大量使用了,但是没有人提到这个临时/永久 ID 问题似乎很奇怪。
在一个上下文中它可以是同一个对象的两个版本感觉不对。如果我将 NSManagedObjectID 传递给子 MOC 并检索它,子 MOC 是否应该更新我现有的对象而不是创建一个新对象并将我的旧临时对象保留为缓存默认值?
是否需要在我创建对象的每个位置使用注释行?
或者它可能与 mergeChangesFromContextDidSaveNotification 一起使用,会产生相同的效果吗?
【问题讨论】:
标签: objective-c core-data ios5 nsmanagedobjectcontext