删除核心数据中的重复对象(iphone)

jbr*_*aun 2 iphone core-data objective-c nspredicate

在我的iPhone应用程序中,我向用户提供行业新闻视图.我从服务器获取此列表作为xml文件.解析并将xml数据插入到我的Core Data存储库中是没有道理的,但在某些情况下我可能会获得重复的新闻条目.

我认为一个好的解决方案是在处理xml feed时插入所有更新,然后删除任何重复项.但我无法弄清楚如何做后者.如何在Apple的Core Data框架中删除重复的对象?

为了使这个具体,让我说我有一个新闻项目:

新闻项目 - uniqueId(由外部系统设置) - title - newsText

有没有简洁的方法告诉Core Data只删除重复的对象,其中重复的对象被定义为具有相同"uniqueId"的对象?即,没有在我的代码中进行显式提取,并确保如果一个具有相同"uniqueId"的对象已经存在,则不要插入对象?

Bar*_*ark 8

核心数据不支持删除"重复",因为对象标识的唯一概念是NSManagedObjectID分配给每个对象.由于您无法手动设置此ID,因此无法在插入时将其用于唯一性.你有(至少)两个选择:

  1. 如你所知,对插入进行提取.测试将揭示这是否太慢:在测试之前,不要认为此解决方案不起作用.您可以通过执行所有插入操作来提高性能,NSInMemoryPersistentStore然后将此持久性存储迁移到永久(磁盘上)存储以进行保存.如果您可以将所有插入的对象保留在内存中,这将非常快.

  2. 您可以插入所有对象,保存,然后执行提取并删除除一个对象之外的所有对象.同样,这可能比你怀疑的更有效.

在这两种情况下,代码量都很小.Instruments.app中的核心数据工具将是判断两种方法性能的最佳工具.