【问题标题】:Binding an NSArrayController to NSDictionary allValues将 NSArrayController 绑定到 NSDictionary allValues
【发布时间】:2012-09-20 22:46:52
【问题描述】:

我遇到过一些场景,我想在 NSTableView 中显示 NSDictionary 中的一些条目。 (我使用 NSDictionaryController 的直觉总是被让每个对象都实现 copyWithZone 的需要所挫败,我发现这是一个荒谬的要求,对可用性来说是致命的......)

相反,我试图将 NSArrayController 绑定到 NSDictionary 的 allValues 属性,目的是绑定表的各个列以及数组中对象的各种属性。但是,我找不到通过数组控制器的 Controller Key 和 Model Key Path 属性在 Cocoa 中指定此绑定的正确方法。

当我尝试将数组直接绑定到 allValues 时,数组控制器的arrangedObjects 属性始终为空 - 即使将对象添加到字典中,当添加被 [dictionary willChangeValueForKey: @"allValues"] 和 [dictionary didChangeValueForKey: @"allValues"] 调用,即使在添加对象后在数组控制器上调用 setContent: 之后也是如此。

当然,我找到了这个 Stack Overflow 线程:

Binding to an NSDictionary's "allValues" array

...并在 Model Key Path 字段中尝试了各种版本的 @"@allValues",但都没有产生预期的结果。

所以这是我的问题:如果我将 ArrayControllerOne 绑定到一个对象,并且我想将 ArrayControllerTwo 绑定到 ArrayControllerOne.selection 中的 NSDictionary 属性(称为“实例”)的 allValues 属性,我应该在控制器密钥和模型密钥路径字段?

提前谢谢...

【问题讨论】:

  • 当字典是另一个数组控制器中的选择时,我不清楚为什么要绑定到 allValues?我很难想象你想要做什么。如果您能举例说明将哪种数据绑定到 arrayController1,那将会很有帮助。
  • 在我的场景中,字典不是“另一个数组控制器中的选择”。它只是类实例的成员。也就是说,我有一个对象,它的成员是一个字典,我想呈现一个表,其中的每一列都反映了字典中每个 value 的一些信息。我还想允许用户在表中选择一行,并访问该行表示的字典值。为了完成这两个任务,我想创建一个绑定到 my_obj.my_dict.allValues 的数组控制器,以及一个包含绑定到数组控制器中条目属性的列的表。

标签: cocoa binding nsdictionary cocoa-bindings nsarraycontroller


【解决方案1】:

你一定漏掉了一个,因为我发现你可以使用 dict.@allValues(不加引号)将数组控制器的内容数组绑定到字典的 allValues 上,其中 dict 是字典的属性名。为什么会这样,我不知道——我找不到任何文档。

顺便说一句,如果我在字典中添加一个新的键值对,我使用 self.dict = _dict;让表格视图更新。

【讨论】:

  • 是的,我试过了。当我这样做时,数组控制器的排列对象数组包含一个对象,而不管字典中有多少条目。 (由于 Cocoa 调试器的限制,我什至无法分辨它是什么类型的对象。)我认为该语法不是调用 allValues 访问器方法并将结果显示在排列对象中,而是简单地将 allValues 访问器分配给排列对象.
  • 这很奇怪,当我这样做时,它表现正常,我的表格视图显示字典中每个值的正确对象。也许您的代码中还有其他问题——我只用一个简单的字典就完成了。
  • 我会再试一次并报告。感谢您的贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多