我正在尝试确定某个应用程序状态,特别是列表中的选定项目是否应存储在Core Data或NSUserDefaults中。
一般来说,我认为应用程序首选项和状态应该保留在NSUserDefaults中,模型级数据应该保留在其他地方,比如Core Data。到目前为止,我的模型是:
我计划在Core Data中存储某些实体的排序顺序。如果没有此信息(即“sortIndex”或“order”属性),则必须使用来自用户默认值的数据来扩充每个实体实例。
然而,在模型中存储状态似乎是一个滑坡。如果我存储排序顺序,那么它似乎也适合存储选择,因为它们都是列表的状态。我的用例的选择数据实际上可能非常大。具体来说,一个列表中的图标取决于每个子列表中的选择。
有没有人对NSUserDefaults与数据模型有一个强硬派?
答案 0 :(得分:5)
你没有提到这是基于文档的应用程序(比如说TextEdit)还是基于库的应用程序(比如说,AddressBook)。
这可以帮助您确定此类信息的去向:假设基于文档的应用程序。假设它的文档被置于版本控制之下(这在使用Core Data的XML数据存储类型时实际上是可行的)。打开应用程序,更改文档的排序顺序。这会弄脏文件吗?这种变化值得办理登机手续吗?该更改对此存储库的其他用户是否有价值?
通常,排序顺序不足以保证基于文档的存储(在界面生成器中使用NSTableView的自动保存名称)。但是你的应用程序可能会优先考虑排序(听起来像它)。
所以,没有严格的规则。但我认为将文档置于版本控制之下,可能与其他人共享的想法提供了一个良好的知识框架,可以为任何一方提供案例。
答案 1 :(得分:2)
我同意rentzsch,但另一种观察方式:
数据的选择部分还是元数据?如果是元数据,是关于单个文档的元数据,还是应该适用于接下来要打开的任何文档的状态?
特定于文档的元数据可能希望存储为扩展属性。例如,TextMate以这种方式存储文档的选择,就像BBEdit,MPW和其他用于存储选项卡设置,窗口大小等的资源,作为资源分支中的资源。元数据被认为是可选的,如果它被剥离,文档就完好无损。
如果选择是数据的组成部分,那么无论如何,如果你碰巧以这种方式摆动,那么无论如何都要使用核心数据将其存储在数据中。
如果它不是基于文档的应用程序,那么NSUserDefaults是最简单的路径,因为对它的支持通常是通过绑定构建到常见的NSView子类中。
答案 2 :(得分:2)
我个人在文件本身或NSUSerDefaults中保存首选项之间没有强硬路线。
但我总是倾向于明显的:
具体来说,对于选择状态,我会判断保持对用户来说是否足够重要。如果它是,并且重要的是随文档移动到另一台计算机,我会将它保存在文档本身。
如果它不重要(或适用),我根本不需要保存它。