将 NSPredicateEditor 绑定到共享用户默认控制器

Posted

技术标签:

【中文标题】将 NSPredicateEditor 绑定到共享用户默认控制器【英文标题】:Binding NSPredicateEditor to Shared User Defaults Controller 【发布时间】:2011-03-06 23:56:53 【问题描述】:

我有一个 NSPredicateEditor,它是我正在制作的工具的首选项面板的一部分。

我想像存储 NSUserDefaults 对象中的任何其他项目一样存储用户的选择,但是当我将 Binding 添加到 NSPredicateEditor 对象并运行该工具时,它不会保留数据并进一步导致其他默认值不显示。当我取消绑定并重新编译时,其他所有内容都会恢复。

将 NSPredicatedEditor 数据存储为用户偏好的最佳方式是什么?

谢谢。

【问题讨论】:

【参考方案1】:

每当NSPredicateEditor 的用户界面发生变化时,这些变化都会立即反映在编辑器的objectValue 中(即,它所代表的NSPredicate)。因此,您可以使用NSKeyedArchiver 获取该谓词并将其存档。这将有效地将谓词转换为NSData 对象,可以将其保存到NSUserDefaults

要读回它,只需抓住NSData 对象,在谓词编辑器上通过NSKeyedUnarchiversetObjectValue: 运行它。

您可以可能通过绑定来完成此操作,尽管我从未尝试过。 You can bind the value of an NSPredicateEditor 提供NSPredicate (或NSData 形式的NSPredicate)。您可能还需要指定值转换器是 NSKeyedUnarchiveFromData 转换器。

【讨论】:

谢谢。它使用 NSKeyedUnarchiveFromData 在 Interface Builder 中工作。这只是节省了我很多时间。我正在实现一个委托,该委托将在单击按钮时使用谓词的描述来更新首选项。但是现在感谢您的简单回答,我刚刚在界面构建器中连接了绑定,它就可以工作了。太好了!

以上是关于将 NSPredicateEditor 绑定到共享用户默认控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何持久化 NSPredicateEditor NSPredicateEditorRowTemplates 数据

将 NSPredicateEditor 添加到 NSScrollView 时出现 UI 故障

NSPredicateEditor 行模板在界面生成器中不可配置

如何将 NSPredicateEditor/NSRuleEditor 背景设置为交替行?

关闭 NSPredicateEditor 动画

使用 NSPredicateEditor 编辑 NSPredicate