2011-05-28 44 views
3

我正在用這個接口的應用程序(抱歉的語言是荷蘭語):(含四個NSTextFields)NSTableView的綁定如何添加一行

http://www.flickr.com/photos/pluueer/5756159100/

add函數下有朝一日,NSTableView將被轉移到一張表格中,但現在這沒問題。我已經根據教程(http://cocoadevcentral.com/articles/000080.php)設置了綁定,但教程不提供如何以我想要的方式添加行(僅添加一個空行你需要在NSTableView中進行編輯)。

我在'Voeg toe'(荷蘭語'Add')按鈕和陣列控制器之間有一個連接。但點擊後,我得到消息:

2011-05-28 23:37:56.149 Hop Calc[4345:a0f] -[__NSPlaceholderDictionary initWithObjects:forKeys:]: number of objects (0) not equal to number of keys (4) 

這是有道理的,因爲我不是添加行實現什麼,但我不知道怎麼辦。

回答

5

「向表中添加一行」是錯誤的思考方式。你的表代表一個集合,一個控制器向表提供信息,在表(視圖)和集合(模型)之間進行調解。由於您提到了綁定,因此該集合可能由NSArrayController管理。所以你想添加一個新的對象(你的數組控制器管理的類型)到數組控制器的內容數組中。

最簡單的方法:將Add按鈕連接到NSArrayController的-add:action。它會添加一個空行。

如果您想要更多控制,請將添加按鈕連接到某個控制器中的自定義動作。這個動作會創建一個由你的數組控制器代表的任何東西的實例,預先填充它(或者你想做的任何事情),然後,使用它保存到NSArrayController的出口,調用數組控制器的-addObject:方法來添加對象可能有一個-rearrangeObjects調用來讓數組控制器重新對其內容進行排序)。

+0

是的,我的意思是ArrayController :) 我重新介紹了添加綁定之前添加的方法。我可以告訴他們對象被添加到數組中,但我似乎無法強制刷新TableView。我怎樣才能做到這一點? – Joran 2011-05-28 23:34:50

+0

你如何添加對象?如果直接將它們添加到內容數組(如不使用數組控制器的方法),則「在數組控制器的後面執行它」,因此它看不到更新。不要將對象直接添加到陣列控制器控制的陣列中;使用NSArrayController的-addObject :(和相關的插入/刪除),以便數組控制器「知道」其內容數組已更改。 – 2011-05-29 00:12:52

+0

也就是說,「強制刷新表格視圖」也不是正確的思考方式。控制器會在發生更改時通知表格視圖,因爲它應該是這樣。 – 2011-05-29 00:13:17

相關問題