我遇到问题已经有一段时间了,我已经想出了一个解决方案,但我正在重新审视它,希望找到一个真正的解决方案。不幸的是,这并没有发生。在 Core Data 中,我有很多 RSS 文章。用户可以订阅单个提要中的各个 channel 。问题是一些提要提供商在同一提要的多个 channel 中发布完全相同的文章。因此,用户最终会获得同一篇文章的 2 个以上版本。我想保留所有文章,以防用户取消订阅包含一份副本的 channel ,但仍订阅另一个包含副本的 channel ,但我只想在可用文章列表中显示一篇文章。
为了识别重复项,我创建了文章文本内容的哈希值,并将其作为属性存储在核心数据 (text_hash) 中的文章实体上。我最初的想法是,我能够制作一个获取请求,该请求可以根据此属性的唯一匹配来获取文章,类似于 SQL 查询。事实证明并非如此(当时我刚刚学习Core Data)。
因此,为了破解一个解决方案,我获取所有文章,创建一个空集,枚举获取结果,检查哈希是否在集合中。如果是,我会忽略它,如果不是,我会将其添加到集合中,并将文章 ID 添加到数组中。完成后,我根据文章 id 创建一个谓词并执行另一次获取。
这看起来确实浪费和笨拙,我不仅获取两次并枚举结果,因为最终谓词是基于单个文章 ID 的,所以每次添加新文章时我都必须重新运行它。
它现在可以工作,但我将开发这个应用程序的新版本,如果可能的话,我希望让它变得更好。感谢任何帮助,谢谢!
最佳答案
您可以使用propertiesToGroupBy
像这样:
NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"Article"];
fr.propertiesToGroupBy = @[@"text_hash"];
fr.resultType = NSDictionaryResultType;
NSArray *articles = [ctx executeFetchRequest:fr error:nil];
关于ios - CoreData 根据不同的属性获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244868/