首先,一些背景:我試圖在Cocoa中實現一個主 - 細節接口(用於OS X)。也就是說,我有一個窗口,其中有兩個顯示兩種不同類型對象的NSTableView
。對於這個問題,我們假設他們是倉庫和包(選擇與我的實際問題類似的示例)。在第一個表視圖(在倉庫中)中選擇一行將顯示屬於該倉庫的包列表第二個表格視圖。對於模型部分,我目前有一個稱爲倉庫對象倉庫的NSMutableArray
,並且每個倉庫對象都有一個包裝對象的NSArray
。需要注意的一點是,倉庫變量在加載NIB文件後被修改,因此必須通知NSArrayController
。在單獨的NIB文件中的多個視圖之間共享一個NSArrayController
現在,我試圖組織它,以便「主」在它自己的視圖對象中,而「細節」在它自己的視圖對象中。這意味着有三個NIB:一個WarehousesView NIB,WarehouseDetailView NIB和一個MainWindow NIB。
- WarehousesView NIB包含一個WarehousesViewController(從
NSViewController
分類)和視圖本身的一個實例。 - WarehouseDetailView NIB包含一個WarehouseDetailViewController實例和視圖本身。
- MainWindow NIB包含主窗口,MainWindowController的實例以及WarehousesView和WarehouseDetailView的實例。窗口本身包含
NSSplitView
,並且分割視圖的視圖連接到NIB文件中的相應視圖實例。
這使我想到我的問題的前半部分:
1)這是分裂的Cocoa應用程序的應用程序視圖的好方法?對我來說這是有道理的,因爲在稍後的時間點,除倉庫清單列表外,關於倉庫的更多詳細信息可能會添加到WarehouseDetailView中。
這是一個重要的問題,因爲一切,如果我跳過創建視圖,並直接將所有控件的窗口,把其他一切,包括對應於倉庫和包裹NSArrayController
情況下,在同一個NIB文件工作得很好。如果我不這樣做,我不需要問問題的後半部分。
的問題的第二半基本上是:
2)我應該在哪裏放置NSArrayController
及其對應於倉庫和軟件包,如果我分裂它如上述那樣,以使主從接口仍然有效?目前我使用Cocoa綁定,所以不知何故倉庫的內容陣列NSArrayController
需要綁定到我的倉庫陣列,以及軟件包的內容陣列NSArrayController
需要綁定到倉庫的選擇NSArrayController
我已經嘗試了一些東西,我無法完成任何工作。具體來說,我已經嘗試將Warehouses的NSArrayController
放入WarehousesView NIB,將NSArrayController
放入WarehouseDetailView NIB。這種方法的問題是,我無法找到一種方法來綁定包NSArrayController
到Warehouse NSArrayController
的選擇。我嘗試的另一件事是(1)將兩個NSArrayController
s放入MainWindow NIB中,(2)將這些NSArrayController
s連接到MainWindowController中的IBOutlets,然後(3)將這些變量通過它們的構造函數傳遞給它們各自的視圖控制器,( 4)通過KVC將它們作爲視圖控制器中的屬性公開,以及(5)通過文件所有者將視圖中必要的表列綁定到數組控制器。結果是什麼也沒有出現,但也沒有錯誤。如果其中一種方法是實現它的首選方法,我可以提供更多詳細信息以幫助查看我是否做得不正確。
在此先感謝!
編輯:我沒看this related question,他們似乎使用的NSArrayController
S表示每個NIB文件不同的實例,如果我理解正確的話,這似乎並沒有從外觀設計上來看是有意義的,但也許我錯了?