2009-10-06 148 views
2

在我的iPhone应用程序中,我为用户提供了行业新闻项目的视图。我从我的服务器获取这个列表作为xml文件。将XML数据解析并插入到我的核心数据存储库中是不容易的,但有一些情况下我可能会得到重复的新闻项条目。删除核心数据中的重复对象(iphone)

我认为一个好的解决方案是在处理xml提要时插入所有更新,然后删除任何重复项。但我不知道如何做后者。如何在Apple的Core Data框架中删除重复的对象?

为了使这个具体的,比方说我有一条新闻:

新闻条目 - UNIQUEID(由外部系统设置) - 标题 - 的新闻稿

有什么简洁的方式告诉核心数据只是删除重复的对象,其中重复的对象被定义为具有相同的“uniqueId”的对象?也就是说,在我的代码中没有做一个明确的提取,并且确保不会在对象与uniqueId已存在的情况下插入对象?

回答

8

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

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

  2. 你可以插入所有的对象,保存,然后做一个提取和删除所有的对象。再一次,这可能比你怀疑的性能更高。

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

0

如果您在Core Data UNIQUE中创建了一个属性uniqueId,并且不是可选的,那么它将不会再次复制相同的项目。