2013-12-12 37 views
0

我知道如何通過NSArrayControllerNSTableView綁定到NSArray如何將NSTableView綁定到自定義集合類?

但綁定NSTableViewMyCustomCollection呢?綁定是什麼樣子的?我仍然可以使用NSArrayController,只需遵守MyCustomCollection中的協議?或者我應該使用不同的控制器對象? MyCustomCollection需要符合什麼?

回答

1

如果不知道更多關於收藏類的內容,這很難完全或專門回答。幾乎可以肯定地創建一個自定義集合類是錯誤的。你應該詳細說明你認爲這是必要的原因和你的實施。準備好考慮你的理由不足以證明將自定義集合干擾到NSArrayController,或者根本無法做到你想要的東西(至少你試圖做到這一點)。

另請注意可可收藏類是(我認爲所有)class cluster的成員。這使得「正確做事」成爲一個非常複雜的挑戰,如果你不得不詢問如何(「如果你必須要問,你還沒有準備好嘗試它」,儘管如此,使得現有的Cocoa集合類變爲壞主意合理的)。

我相信,只要你的類響應爲做同樣的選擇(至少)NSArray(如果不是NSMutableArray如果你的類是可變的),包括Key Value Coding collection accessor methods,它或許應該正常的工作。由於您的表(或更可能是其列)綁定到數組控制器,該部分應該工作相同。由於NSArrayController繼承-content/-setContent:NSObjectController這些方法採取id參數,我相信它可能會使用我引用的KVC訪問器方法來獲取該集合的成員。

但我可能是錯的... :-)

+0

這一直是我的懷疑,到目前爲止:它最好只使用可用的工具,而不是創建自定義的方法。我在學習'NSArrayController'時遇到的第一個問題是:「如果我的數據沒有如此整潔地存儲在內存中,該怎麼辦?」。例如,一個使用'NSTableView'顯示聊天記錄的聊天應用程序,其中聊天記錄是內存中某些事物的聯合,並且如果我們追溯到足夠遠的話,那麼來自.txt文件的內容就足夠了。 – tenfour

+0

使用現有的Cocoa類(包括集合類)在一個非常普通的對象圖中,您的情況仍然可以很容易地在內存中表示。如果一個「message」類有一個「text」字符串屬性,一個「date」屬性,一個「from」字符串(或者引用一個帶有「name」字符串的「user」類)每個「消息」轉換爲數組或可變數組,然後將Cocoa控件綁定到控制器的arrangeObjects.text或arrangedObjects.user.name鍵路徑以獲取數據。那很簡單。不確信您的案例需要通過此描述進行自定義收集。 –

+0

跑出房間,但如果你還沒有徹底學習KVC/KVO。我懷疑你還沒有掌握如何通過一個數組控制器的集合來走動一個對象圖,並且正在引用Commander Data「追逐一個沒有原因的未開化的鳥類」。 ;-) –

相關問題