2

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

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

为了具体化,假设我有一个新闻:

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

是否有任何简洁的方法告诉 Core Data 只删除重复的对象,其中重复的对象被定义为具有相同“uniqueId”的对象?即,如果没有在我的代码中进行显式提取,并且如果已经存在具有相同“uniqueId”的对象,请确保不插入该对象?

4

2 回答 2

9

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

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

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

在这两种情况下,代码量都是最少的。Instruments.app 中的 Core Data 工具将是您判断这两种方法性能的最佳工具。

于 2009-10-06T23:19:13.730 回答
0

如果您在 Core Data UNIQUE 中创建属性 uniqueId 且不是可选的,则它不会再次复制相同的项目。

于 2010-06-22T19:28:39.063 回答