【问题标题】:Using distinctUnionOfObjects with an NSArrayController and NSTableView将 distinctUnionOfObjects 与 NSArrayController 和 NSTableView 一起使用
【发布时间】:2011-06-26 16:36:36
【问题描述】:

我在过滤 NSArrayController 的内容并将其绑定到 NSTableView 的列时遇到问题。

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

现在,我想向所有使用NSTableView 的客户展示,当然我需要它是无重复的。 我知道我可以使用@distinctUnionOfObjects 创建一个独特的客户数组,但它在 Interface Builder 的 Binding Inspector 菜单中不起作用。 当我使用控制器密钥: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".

也许distinctUnionOfObjects 不是正确的方式!

我怎样才能拥有具有唯一参数的NSTableView?

【问题讨论】:

  • 请编辑您的问题以显示您在控制台中收到的确切消息。
  • @peter Hosey,问题已编辑仅供参考。

标签: objective-c cocoa macos cocoa-bindings nsarraycontroller


【解决方案1】:

当我使用控制器密钥: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".

您已绑定到模型对象,而不是数组控制器。 arrangedObjects 是数组控制器的属性,@distinctUnionOfObjects 是只有数组和集合支持的特殊键,所以你需要绑定到你的数组控制器。

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

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

如果您打算禁止使用相同名称的多个客户,请在使用 Key-Value Validation 输入或更改客户时执行此操作,并在表格视图中删除此输出限制。如果不知何故,您的用户在他们的数据库中获得了多个同名用户,您不希望您的应用程序发疯。

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

【讨论】:

  • 老实说,我同意你的观点,添加重复数据在数据库中的数据规范化之前。我认为这发生在我身上,因为我仍在用 SQL 思维思考,并且在使用像 core data 这样的数据模型时遇到问题。无论如何,我该怎么做才能在每张账单中收到 customer's name 以防止重复?请考虑到我必须收到每张账单的客户姓名,并且此客户姓名与账单代码相关,因此我无法阻止在数据中获取客户姓名入口。那我该怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2022-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多