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

Posted

技术标签:

【中文标题】你如何为每个父项存储子 NSTableView 设置?【英文标题】:How do you store child NSTableView settings for each parent item? 【发布时间】:2010-12-18 23:40:32 【问题描述】:

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

不过,我有很多列,并且不想手动存储每个单独的列大小等。我也在使用 Core Data,并且希望使用我现有的数据模型来持久化的解决方案这个信息。

更新

我发现了一些代码 (a Category from Daniel Jalkut),可以轻松存储和读取 NSDictionary 表示 NSTableView 的列设置。因此,我在我的 Core Data 实体中创建了一个二进制属性,该属性现在存储该实体视图的设置。

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于你如何为每个父项存储子 NSTableView 设置?的主要内容,如果未能解决你的问题,请参考以下文章

OSX 基于视图的 NSTableView 字体更改

你如何为 getInitialProps 编写 Jest 测试?

你如何为 iPhone 实现横向启动屏幕?

你如何为 IE 开发插件?

你如何为 Flask 安装 MySQL? [复制]

你如何为 UIImagePickerController 的导航栏着色/自定义?