【问题标题】:NSFetchedResultsController predicate to eliminate duplicates of several propertiesNSFetchedResultsController 谓词消除多个属性的重复
【发布时间】:2019-01-19 03:12:01
【问题描述】:

我在 UITableViewController 中使用 NSFetchedResultsController。

是否可以指定一个谓词,该谓词不会检索在我指定的 x 个字段中具有重复字段的项目。

例如,我想搜索项目的所有结果,但如果 itemName AND itemDescription AND itemQuantity 相同,我只需要其中一项。

【问题讨论】:

    标签: swift xcode core-data nspredicate nsfetchedresultscontroller


    【解决方案1】:

    选项 1

    当页面加载时,对数据进行一次运行并保留重复的 objectID 列表。对于重复对象,将单元格的行高设置为 0。所以它们在技术上仍然存在,但你看不到它。这使得处理 NSFetchedResultsControllerDelegate 调用变得容易,因为 indexPaths 没有改变

    选项 2

    如果始终以相同的方式选择数据集并且重复的对象始终是重复的,则可以在对象中设置“isDuplicate”并在谓词中将其过滤掉。或者您根本无法存储。如果对象以不同的集合和不同的方式显示,有时应该显示有时不显示,这不是一个好的解决方案

    选项 3

    如果您按照使对象重复的相同标准进行排序(即重复项总是出现在非重复项旁边)并且您不使用部分,那么您可以使用 sectionKeyPath。 SectionKeyPath 将项目组合成部分。将重复项和非重复项分组在一起,然后将每个部分显示为一行(使用每个部分中的第一项)。 fetchedResultsController 的 indexPaths 将与 tableview 的 indexPaths 不匹配,因此您必须小心转换它们。

    选项 4

    不要从 fetchedResultsController 访问对象,而是执行 fetch 并过滤数组。然后使用数组来显示对象。缺点是当对象更改时您不会获得更新。如果对象被删除,这尤其成问题,因为访问被删除实体的 managedObject 可能会导致崩溃。

    我推荐选项 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多