我已创建自定义控件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这样做,所以我知道这是可能的,但我无法弄清楚它是如何实现的。
实现这一目标的最佳方式是什么?
答案 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
特殊情况下它对NSArrayController
和arrangedObjects
的绑定,这就是为什么它以正确的方式运行,而我的自定义控件没有。
这似乎不是很灵活,但这是我能找到让它真正起作用的唯一方法。我在NSArrayController和arrangeObjects的绑定中实现了一个特例,我能够让它像我想要的那样工作。
但是,我们非常感谢更好的解决方案!