我想确定某些应用程序状态,特别是列表中选定的项目是否应该存储在核心数据或NSUserDefaults中。应用程序状态何时属于Core Data而不是NSUserDefaults?
一般来说,我认为应用程序首选项和状态应该保留在NSUserDefaults中,并且模型级别的数据应该保存在其他地方,比如核心数据。我的模型到目前为止是:
- 数据应该存储在所有?如果用户将不能合理地期望它,然后把它扔出去(例如,光标位置不被保存在文本编辑)
- NSUserDefaults的:
- 如果程序是多文档,设置会适用于所有文档
- 这是可以想象的是,数据将偏好
- 具有模型以外的数据进行配置,使测试的意义(换几个默认有一个模型店)
- 模型级 个
- 的数据清楚地属于作为模型级对象
- 的数据的属性是足够大,使得将它存储在NSUserDefaults的会造成性能问题
- 这将是困难的或时间密集的为用户重新创建数据(他们肯定会考虑这一信息“数据丢失”的损失)
我打算在存储核心数据的一些实体的排列顺序。如果没有这些信息(即“sortIndex”或“order”属性),每个实体实例将不得不用来自用户默认值的数据增加。
但是,在模型中存储状态看起来像一个滑坡。如果我存储排序顺序,那么它也适合存储选择,因为它们都是列表状态。我的用例的选择数据实际上可能相当大。具体来说,一个列表中的图标取决于每个子列表中的选择。
有没有人有他们相对于NSUserDefaults与数据模型绘制的强硬路线?
这是一个iPhone应用程序,在我的情况下属于基于库的场景。我喜欢考虑假设的多文档应用程序的心理模型,以及这种变化是否会使应用程序变得肮脏。就我而言,由于选择子列表会改变较高列表的视图(具体来说,子选择会更改在较高视图中的项目旁边显示的图像)。 关于排序,我的意思是排序顺序是用户定义的。也就是说,他们可以任意排列列表(如在iTunes中创建播放列表)。 – orque 2009-08-13 17:24:17
基于“它是否弄脏了文档”我也想添加“对数据的更改是否会导致对撤消堆栈的添加”。撤消对基于文档和基于库的应用都适用,因此它似乎是一种很好的启发式方法。 – orque 2009-08-14 03:36:07