我在过滤NSArrayController
内容并将其绑定到NSTableView
的列时遇到问题。
事实上,我有一个表格,我用它来为我们的客户生成账单。为此,我有一个名为Customer
的数组,我可以在那里收集每个客户的信息。
现在,我希望使用NSTableView
向所有客户展示,当然我需要它是免费的。
我知道我可以使用@distinctUnionOfObjects
创建一个独特的客户数组,但它在Interface Builder的Binding Inspector菜单中不起作用。
当我使用Controller Key:arrangedObjects
和Model Key Path:@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".
也许distinctUnionOfObjects
不是正确的方法!
如何使用具有唯一参数的NSTableView
?
答案 0 :(得分:2)
当我使用Controller Key:arrangeObjects和Model Key Path:@ 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".
您已绑定到模型对象,而不是数组控制器。 arrangedObjects
是数组控制器的属性,@distinctUnionOfObjects
是仅由数组和集支持的特殊键,因此您需要绑定到数组控制器。
请注意,您的@distinctUnionOfObjects
过滤器仅适用于该列,而不适用于其他列。因此,您只是过滤客户的名称,而不是客户自己。这很可能是错的;您仍然可以在模型中拥有多个具有相同名称的客户,当您这样做时,表视图将会翻转(因为您已经为它提供了多个不同长度的列)或显示有效垃圾(错误的名称,因为它们相对于其他列向上移动。)
此外,假设您有一个只包含名称列的表视图,例如源列表,您可以对其应用此过滤。然后,当您有重复的客户时,该应用程序将只显示其中一个,并且它将是一个随机的。如果用户删除该客户,则另一个(或其他一个)将出现;这将显示为删除失败(“我删除了John Smith,但John Smith仍然出现在列表中!”。)
如果您打算禁止多个具有相同名称的客户,请在使用Key-Value Validation输入或更改客户时执行此操作,并在表格视图中删除此输出限制。如果您的用户以某种方式在其数据库中获得具有相同名称的多个用户,那么您不希望您的应用程序发生疯狂。
您需要防止输入重复,而不是输出。