Objective c 将distinctUnionOfObjects与NSArrayController和NSTableView一起使用

Objective c 将distinctUnionOfObjects与NSArrayController和NSTableView一起使用,objective-c,cocoa,macos,cocoa-bindings,nsarraycontroller,Objective C,Cocoa,Macos,Cocoa Bindings,Nsarraycontroller,我在筛选NSArrayController的内容并将其绑定到NSTableView的列时遇到问题 事实上,我有一个表单,我用它为我们的客户生成账单。为此,我有一个名为Customer的数组,我可以在那里收集每个客户的信息 现在,我想向所有使用NSTableView的客户展示它,当然我需要它是无副本的。 我知道我可以使用@distinctUnionOfObjects创建一个独特的客户数组,但它在Interface Builder的Binding Inspector菜单中不起作用。 当我使用控制器键

我在筛选
NSArrayController
的内容并将其绑定到
NSTableView
的列时遇到问题

事实上,我有一个表单,我用它为我们的客户生成账单。为此,我有一个名为
Customer
的数组,我可以在那里收集每个客户的信息

现在,我想向所有使用
NSTableView
的客户展示它,当然我需要它是无副本的。 我知道我可以使用
@distinctUnionOfObjects
创建一个独特的客户数组,但它在Interface Builder的Binding Inspector菜单中不起作用。 当我使用控制器键:
排列对象
和模型键路径:
@distinctUnionOfObjects.customerName
时,我收到一个错误,告诉我该实体不符合KVC

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".
2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".
2011-06-28 00:22:03.212 FinancingPro[459:903][valueForUndefinedKey:]:实体客户不符合键“@distinctUnionOfObjects”的键值编码。
也许
distinctUnionOfObjects
不是正确的方法

如何使
NSTableView
具有唯一参数

当我使用控制器密钥:arrangedObjects和模型密钥路径:@distinctUnionOfObjects.customerName时,我收到一个错误,告诉我该实体不符合KVC

2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".
2011-06-28 00:22:03.212 FinancingPro[459:903] [<NSManagedObject 0x10053e1a0> valueForUndefinedKey:]: the entity Customer is not key value coding-compliant for the key "@distinctUnionOfObjects".
2011-06-28 00:22:03.212 FinancingPro[459:903][valueForUndefinedKey:]:实体客户不符合键“@distinctUnionOfObjects”的键值编码。
您已绑定到模型对象,而不是数组控制器
arrangedObjects
是数组控制器的属性,而
@distinctUnionOfObjects
是仅由数组和集合支持的特殊键,因此需要绑定到数组控制器

请注意,
@distinctUnionOfObjects
过滤器将只应用于该列,而不应用于其他列。因此,您只过滤客户的姓名,而不是客户本身。这很可能是错误的;您仍然可以在模型中使用相同名称的多个客户,当您这样做时,表视图将翻转(因为您为它提供了多个不同长度的列),或者显示实际上是垃圾的内容(名称错误,因为它们相对于其他列上移)

此外,假设您有一个只包含名称列的表视图,例如源列表,并且您对其应用了此筛选。然后,当你有重复的客户时,应用程序将只显示其中一个,并且是随机的。如果用户删除该客户,则会显示另一个(或其中一个);这将显示为删除失败(“我删除了John Smith,但John Smith仍显示在列表中!”)

如果要禁止使用相同名称的多个客户,请在使用输入或更改客户时执行此操作,并在表视图中删除此输出限制。如果您的用户在其数据库中以相同的名称获得多个用户,您不希望您的应用程序变得疯狂


您需要防止输入而不是输出重复。

请编辑您的问题,以显示您在控制台中得到的确切信息。@peter Hosey,问题编辑供参考。老实说,我同意您的看法,添加重复数据是数据库中数据规范化的前提。我认为这种情况发生在我身上,因为我仍然用SQL思维,并且在使用数据模型(如核心数据)时遇到问题。无论如何,我该怎么做才能在每张账单中收到客户的姓名,防止重复?请考虑我必须接受客户的名字为每一个帐单,这个客户的名字是与条例草案,所以我不能阻止客户的名字在数据录入。那我该怎么办?