Core data NSArrayController,已排序且唯一(无重复项),用于核心数据应用程序中的弹出窗口

Core data NSArrayController,已排序且唯一(无重复项),用于核心数据应用程序中的弹出窗口,core-data,unique,duplicates,nsarraycontroller,Core Data,Unique,Duplicates,Nsarraycontroller,我有一个核心数据应用程序,它带有一个实体观察,其属性之一是DEALNAME。 我想通过Interface Builder或通过对NSArrayController进行自定义修改来引用唯一排序的DealName列表,以便在弹出窗口中使用它们 我尝试使用@distinctUnionOfSets和@distinctunionofrays,但无法找到正确的键序列 我可以通过提供排序描述符对ArrayController进行排序,但不知道如何消除重复项 是“不同的”。。。选择正确的方法?它似乎提供了优化I

我有一个核心数据应用程序,它带有一个实体观察,其属性之一是DEALNAME。 我想通过Interface Builder或通过对NSArrayController进行自定义修改来引用唯一排序的DealName列表,以便在弹出窗口中使用它们

我尝试使用@distinctUnionOfSets和@distinctunionofrays,但无法找到正确的键序列

我可以通过提供排序描述符对ArrayController进行排序,但不知道如何消除重复项

是“不同的”。。。选择正确的方法?它似乎提供了优化IB使用的最简单方法

是否存在用于删除重复项的谓词形式

或者我是否需要使用我的自定义控制器来提取特定DealName的NSSet,将它们放回数组中并对其进行排序,然后从IB引用自定义数组


任何帮助都将不胜感激。我感到惊讶的是,其他人没有尝试在TableView中创建排序的唯一弹出窗口。

您需要查看-[NSFetchRequest returnsDistinctResults]。这是处理数据统一所需的级别。

虽然我没有一个明确的答案,但我认为有两种方法可以解决这个问题

你已经开始的方式。您需要绑定弹出按钮的内容数组,而不仅仅是针对arrayController.arrangedObjects,而是继续在路径上,以某种方式仅过滤具有不同DealName的对象。这意味着-arrayController显示所有实体,并可能为您排序,但弹出按钮将通过与阵列控制器的复杂绑定进行内容过滤

按照此处另一个答案中的建议,在ArrayController级别进行筛选。这取决于如何设置阵列控制器。如果设置为使用实体vs.类,这意味着阵列控制器将直接获取CoreData实体-您可以修改其获取,以仅获取具有不同DEALNAME值的观察实体子集。我不知道如何控制在这种情况下过滤掉哪些实体。否则,您可以将arrayController设置为使用类对象,然后您可以自己在代码中获取实体,并以编程方式使用您喜欢的实体填充arrayController

在第二个选项中,弹出按钮通常应绑定到arrayController的arrangedObjects