2011-01-25 159 views
0

我已将子类型NSTextField创建为自定义控件,并且我想将自定义控件的属性(它是NSArray)绑定到NSArrayController。不过,我不知道如何从阵列中传播数组到NSArrayController。我在NSArrayController上使用的关键路径是arrangedObjects.name。例如,如果我想在阵列(@"One", @"Two", @"Three")传播和我简单地使用:将自定义控件绑定到NSArrayController

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

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

NSTableColumn做到这一点,所以我知道这是可能的,但我无法弄清楚是怎么回事实现。

达到此目的的最佳方法是什么?

+0

您必须提供更多有关您的新自定义属性的信息。请详细说明。 – 2011-01-25 16:14:54

+0

它只是一个名为`customContent`的'NSArray *`(缺乏更好的名称),它符合KVO。我希望能够将它绑定到一个“NSArrayController”(双向)。但我真的需要做的就是在'NSArrayController`上正确设置'arrangedObjects.name`键路径(如上所述)。 – 2011-01-25 16:19:33

回答

0

好的,我想我可能已经回答了我自己的问题。如果有人能告诉我更好的方法来做到这一点,我不会马上将其标记为正确的答案。这种方式几乎是一种破解。

反正我是念叨NSArrayController的位置:http://www.cocoadev.com/index.pl?NSArrayController它说:

如果valueForKeyPath:@"arrangedObjects.name"被发送到阵列控制器,一个(如预期)回来名值的数组,但如果其他对象重复此行为以及表列的值将绑定到此对象,它将显示每行的整个数组。

您绑定的NSTableColumnarrangedObjects.someKey的价值。如果您尝试以编程方式在您的阵列控制器上调用valueForKeyPath:@"arrangedObjects.someKey",您将返回arrangedObjects阵列上调用valueForKey:@"someKey"产生的数组 - 这一切都很好。所以人们会认为NSTableColumn的价值也可以绑定到我的对象someArray.someKey,但这不起作用(在几个层面上)。

所以基本上,它听起来就像NSTableColumn特殊情况下其绑定NSArrayControllerarrangedObjects这就是为什么它的工作原理正确的方式,和我的自定义控件没有。

这似乎不是很灵活,但它是我能找到的唯一途径,使其实际工作。我在我的绑定NSArrayController和arrangeObjects中实现了一个特例,并且我能够使它像我想要的那样工作。

虽然更好的解决方案将非常感谢!

相关问题