NSFetchedResultsController谓词可消除多个属性的重复项

时间:2018-08-11 23:24:57

标签: swift xcode core-data nspredicate nsfetchedresultscontroller

我正在UITableViewController中使用NSFetchedResultsController。

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

例如,我想在所有结果中搜索项目,但是如果itemName AND itemDescription AND itemQuantity相同,则我只需要这些项目之一。

1 个答案:

答案 0 :(得分:2)

选项1

在页面加载时,对数据进行一次遍历,并保留一个重复的objectID列表。对于重复的对象,请将单元格的行高设置为0。因此,从技术上讲,它们仍然存在,但是您看不到它。这使得处理NSFetchedResultsControllerDelegate调用变得容易,因为没有indexPath发生改变

选项2

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

选项3

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

选项4

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

我建议选择1