如何为每个父项存储子NSTableView设置?

时间:2010-12-18 23:40:33

标签: cocoa core-data nstableview key-value-observing nstreecontroller

为其父NSTableView中的每个项目存储NSTreeController设置(最好是利用其自动保存功能)的最佳方法是什么?我基本上想要重现iTunes分别存储每个播放列表的列设置的方式。

我有很多专栏,并且不想手动存储每个列的大小等。我也使用Core Data,并且喜欢使用我现有数据模型的解决方案这个信息。

更新

我找到了一些代码(a Category from Daniel Jalkut),可以轻松存储和阅读NSDictionary列设置的NSTableView表示。所以我在我的核心数据实体中创建了一个二进制属性,现在存储了该实体视图的设置。

我希望能够做的是在选择每个实体实例时自动检索设置。我曾尝试在我的NSTreeController上使用键值观察进行此操作,但遗憾的是,它没有给我足够的通知。我想知道我正在切换的项目,以便我可以在使用新节点的设置覆盖之前存储上一节点的设置。

我尝试观察@"selection"@"selectedObjects"@"selectedIndexPaths",我可以找到每个options个参数,但这些参数似乎都没有正常工作。我在适当的时间收到通知,但在属性更改发送的"change"字典中没有任何有用的信息。

1 个答案:

答案 0 :(得分:2)

我决定使用上面链接的NSTableView+RSAutosaving类别(由Daniel Jalkut和Red Sweater Software提供),并进行一些修改以存储列是否隐藏。我将此NSDictionary存储为我的Core Data父实体中的二进制数据属性(我创建了另一个以分别存储排序信息)。

然后,我让我的窗口控制器听取来自我的NSOutlineView的两个通知。在@"NSOutlineViewSelectionIsChangingNotification"通知中,NSTreeController的选择是旧节点。我此时存储了NSTableView的设置。然后,在@"NSOutlineViewSelectionDidChangeNotification"通知中,我从新节点读取设置。这就像一个魅力。