【发布时间】: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