gpt4 book ai didi

objective-c - 什么时候应用程序状态属于核心数据而不是 NSUserDefaults?

转载 作者:太空狗 更新时间:2023-10-30 03:42:09 31 4
gpt4 key购买 nike

我正在尝试决定是否应将某些应用程序状态(特别是列表中的选定项)存储在 Core Data 或 NSUserDefaults 中。

一般来说,我认为应用程序首选项和状态应该保留在 NSUserDefaults 中,模型级数据应该保留在其他地方,比如 Core Data。到目前为止,我的模型是:

  • 是否应该存储数据?如果用户不合理地期望它是,则将其丢弃(例如,光标位置未保存在 TextEdit 中)
  • NS 用户默认值:
    1. 如果应用程序是多文档,则该设置将应用于所有文档
    2. 可以想象数据会在偏好中配置
    3. 拥有模型外部的数据对于测试很有意义(用一个模型存储交换多个默认值)
  • 模型级
    1. 数据显然属于模型级对象的属性
    2. 数据足够大,将其存储在 NSUserDefaults 中会导致性能问题
    3. 用户重新创建数据会很困难或很耗时(他们肯定会认为丢失此信息为“数据丢失”)

我计划将一些实体的排序顺序存储在 Core Data 中。如果没有此信息(即“sortIndex”或“order”属性),每个实体实例都必须使用来自用户默认值的数据进行扩充。

然而,在模型中存储状态似乎是一个滑坡。如果我存储排序顺序,那么存储选择似乎也是合适的,因为它们都是列表的状态。我的用例的选择数据实际上可能非常大。具体来说,一个列表中的图标取决于每个子列表中的选择。

有没有人对 NSUserDefaults 与数据模型持强硬态度?

最佳答案

您没有提到这是基于文档的应用程序(例如 TextEdit)还是​​基于库的应用程序(例如 AddressBook)。

这可能会帮助您决定这些信息应该放在哪里:假设一个基于文档的应用程序。假设它的文档被置于版本控制之下(这在使用 Core Data 的 XML 数据存储类型时实际上是可行的)。打开应用程序,更改文档的排序顺序。这会弄脏文档吗?这种变化值得 checkin 吗?此更改对该存储库的其他用户有值(value)吗?

通常,排序顺序的值(value)不足以保证基于文档的存储(如 NSTableView 在 Interface Builder 中的自动保存名称)。但是您的应用可能会优先考虑排序(听起来像)。

所以,没有硬性规定。但我认为将文档置于版本控制之下并可能与其他人共享的想法提供了一个很好的知识框架,可以为双方辩护。

关于objective-c - 什么时候应用程序状态属于核心数据而不是 NSUserDefaults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1270196/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com