手动合并Core Data对象

时间:2015-03-24 17:25:42

标签: ios core-data restkit

在使用RestKit的应用程序中,我有时会创建两个“相同”对象的实例:应用程序可能同时执行多个映射操作并在一个中创建一个完整对象,一个占位符只包含其服务器分配的唯一ID另一个。这些对象是单独的Core Data对象,并且具有不同的objectID s,尽管具有相同的serverID s。

因为我不想两次显示同一个对象,所以我希望合并这些“重复”对象。目前我正在检查validateForInsert:对象是否是现有对象的“重复”,如果是,则返回错误。

然后我接受所有错误,合并冲突对象(保留最旧的对象),并删除重复项。

这是出错的地方,我崩溃了:我的应用程序的某些部分 - UI或其他 - 引用了'已删除''复制'NSObject,这现在是一个错误。它被引用并且无法实现错误,因为NSManagedObject不再存在。

我该如何避免这种情况?

我真的想避免审核每个对托管对象上下文的引用,并且必须始终检查它是否已成为错误并且应该替换为另一个,正确NSManagedObject我必须查找

1 个答案:

答案 0 :(得分:0)

第一个建议是不要同时运行请求。除此选项以外的任何内容都需要您的合作(如您所示)并管理引用。

如果您需要合并,那么您当前的方法是可以的。更新引用显然是一个问题。你可以做得比删除最年轻的做得更好,但这就是重点。

管理引用的最简单方法是使用NSFetchedResultsController,因为他们会看到添加和删除并为您更新。

如果您明确地将引用传递给托管对象,则需要监视删除。最可能的路线是发布删除通知(或使用内置的更改通知)并删除引用(可能执行替换的获取请求)。