将自定义控件绑定到NSArrayController

时间:2011-01-25 14:53:13

标签: objective-c cocoa binding

我已创建自定义控件NSTextField,我想将自定义控件的属性(NSArray)绑定到NSArrayController。但是我不知道如何将数组从我的控件传播到NSArrayController。我在NSArrayController上使用的关键路径是arrangedObjects.name。例如,如果我正在尝试传播数组(@"One", @"Two", @"Three"),我只使用:

[boundObject setValue:myArray forKeyPath:@"arrangedObjects.name"]

它会将arrangedObjects.name的每个元素的值设置为数组(@"One", @"Two", @"Three")。我想要发生的是将arrangedObjects.name中的第一个元素设置为@"One",将第二个值设置为@"Two"等等。

NSTableColumn这样做,所以我知道这是可能的,但我无法弄清楚它是如何实现的。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

好吧,我想我可能已经回答了我自己的问题。我不会立刻将其标记为正确答案,以防有人告诉我更好的方法。这种方式非常糟糕。

无论如何,我在这里阅读有关NSArrayController的内容:http://www.cocoadev.com/index.pl?NSArrayController其中说:

  

如果将valueForKeyPath:@"arrangedObjects.name"发送到数组控制器,则一个(按预期方式)返回一个名称值数组,但如果另一个对象复制此行为,并且表列的值改为绑定到此对象,则将显示每行的整个数组。

  

您将NSTableColumn的值绑定到arrangedObjects.someKey。如果您尝试以编程方式在数组控制器上调用valueForKeyPath:@"arrangedObjects.someKey",那么您将通过调用valueForKey:@"someKey"数组上的arrangedObjects来获取数组 - 这一切都很好。所以人们会认为NSTableColumn的值也可以绑定到我的对象someArray.someKey,但这不会起作用(在几个级别上)。

所以基本上它听起来像NSTableColumn特殊情况下它对NSArrayControllerarrangedObjects的绑定,这就是为什么它以正确的方式运行,而我的自定义控件没有。

这似乎不是很灵活,但这是我能找到让它真正起作用的唯一方法。我在NSArrayController和arrangeObjects的绑定中实现了一个特例,我能够让它像我想要的那样工作。

但是,我们非常感谢更好的解决方案!