2012-09-01 62 views
0

我有一個也是NSOutlineViewDataSource的自定義NSViewController。我也有一個NSOutlineView作爲數據源綁定到我的視圖控制器實例的窗口,而NSOutlineView綁定到自定義視圖控制器的view:屬性。當視圖選擇發生變化時,自定義NSViewControllerrepresentedObject不會更新

控制器很好地填充大綱視圖。但是,視圖內的選擇不會自動更新控制器的representObject屬性。似乎在代表對象中觸發更改的唯一情況是,當我調用setRepresentedObject時:直接...這種方式擊敗了目的。

任何想法爲什麼這可能是?代表物體應該自動更新,對不對?在此先感謝...

回答

3

如果我理解你的問題,你不明白representedObject是什麼。 representedObject是代表所有視圖控制器正在顯示的數據的模型對象。這不是當前選擇顯示內容集合的視圖。您的自定義頂級視圖控制器的representedObject將是NSArray或其他集合類,其中包含您在視圖控制器中顯示的一組數據。如果正確使用了模式,那麼更改您的自定義頂級視圖控制器的representedObject應該具有交換全新數據集的效果。

通常,表格類型視圖中各個元素的視圖控制器各自都有自己的representedObject,並且此對象不會更改。例如,如果您使用的是NSCollectionView,則視圖中的每個元素都由NSCollectionViewItem控制,NSCollectionViewItemNSViewController的子類。每個NSCollectionViewItemrepresentedObject都會告訴它什麼數據要呈現在它的小視圖中。

NSOutlineView和它的超NSTableView是不同的,因爲他們的細胞往往NSCells,而不是完全成熟的NSViews,除非你選擇使用它們在Mac OS X 10.7或更新這種方式。即使在這種情況下,您通常也不會有管理每個單元的NSViewController子類。所以視圖控制器representedObject模式不會在用戶選擇的單個元素的級別上使用。如果你想要跟蹤NSOutlineView的選擇,有很多NSTableView方法可以讓你做到這一點。

+0

啊,我明白了 - 謝謝你;這回答了我的問題。 –

相關問題