0

對於其父母NSTreeController中的每個項目,存儲NSTableView的設置(理想情況下利用其自動保存功能)的最佳方式是什麼?我基本上想重現iTunes分別存儲每個播放列表的列設置的方式。如何爲每個父項目存儲子級NSTableView設置?

雖然我有很多列,並且不想手動存儲每個單獨的列大小等。我也使用Core Data,並且會喜歡使用我現有數據模型的解決方案來堅持這一信息。

更新

我發現了一些代碼(a Category from Daniel Jalkut),可以輕鬆存儲和讀取的NSTableView的列設置一個NSDictionary表示。所以我在我的Core Data實體中創建了一個二進制屬性,該實體現在正在存儲該實體視圖的設置。

我希望能夠做的是在選擇實體的每個實例時自動檢索設置。我曾嘗試在我的NSTreeController上使用Key-Value Observation來做這件事,但不幸的是我沒有給我足夠的通知。我想知道我要切換的項目,以便在用新節點的設置覆蓋它們之前,可以存儲之前節點的設置。

我試着觀察@"selection"@"selectedObjects",並且@"selectedIndexPaths",每options說法我能找到的,其中沒有一個似乎正常工作。我會在適當的時候收到通知,但"change"字典中沒有任何有用信息,表明屬性更改發送。

回答

2

我決定使用鏈接到上面的NSTableView+RSAutosaving類別(由Daniel Jalkut和Red Sweater Software提供),並進行了一些修改以存儲列是否隱藏。我將這個NSDictionary作爲二進制數據屬性存儲在我的Core Data父實體中(並且我創建了另一個單獨存儲排序信息)。

然後,我讓我的窗口控制器偵聽來自我的NSOutlineView的兩個通知。在@"NSOutlineViewSelectionIsChangingNotification"通知中,NSTreeController的選擇是舊節點。我此時存儲NSTableView的設置。然後,在@"NSOutlineViewSelectionDidChangeNotification"通知中,我讀入新節點的設置。這像一個魅力。

+0

謝謝您先生提出您的解決方案。是否也存儲了這個位置...... – 2013-06-25 20:19:56

相關問題