2011-01-25 148 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中實現了一個特例,並且我能夠使它像我想要的那樣工作。

雖然更好的解決方案將非常感謝!

相關問題