适用于iOS的数据存储选项

时间:2016-02-29 20:59:55

标签: ios core-data nsuserdefaults

我正在构建一个在无法获得wifi或数据连接时需要离线模式的应用程序。

我想知道以下情况的最佳解决方案是什么。

让我们说我的应用程序允许用户在日历上查看,添加和修改活动。

要使应用程序脱机工作,我只需要存储当前的活动天数。这可能是1到10个事件之间。每个活动都有名称,描述和各种其他小型物业。

我一直在看核心数据,我想知道这对我需要的东西是否有点过分。我不需要镜像整个数据库或类似的东西。

我可以建设性地使用NSUserDefaults存储这个信息之王。 什么是NSUserDefaults在您可以存储的类型和数量方面的限制。

离线版本可能需要存储比上述更多的实体,因此它是一种存储数据的可行方法,只要数据量很大。

任何建议都会很棒。

2 个答案:

答案 0 :(得分:1)

NSUserDefaults的

  • NSUserDefaults真正用于存储小块数据,例如设置,偏好设置和个人值。
  • NSUserDefaults提供了一个简单的学习曲线和线程安全实现。

CoreData

  • 学习曲线可能有点陡峭
  • CoreData及相关类提供了将您的实体放入UITableViews的简便方法,例如NSFetchedResultsController
  • CoreData抽象出许多你本来必须处理的乱七八糟的东西,例如对象列表,一对多或多对多关系,或对象属性的约束,进入一个漂亮的,干净的面向对象的界面
  • CoreData为您管理保存和撤消功能。它有一个持久存储,可跟踪更改,并可以任意次数自动刷新到磁盘

但是,如果你是Cocoa的新手,我会避免CoreData,让自己有机会先学习基础知识。

如果我不得不选择,我会直接潜入CoreData。对小型项目也有意义。 NSUserDefaults并不打算用作数据库(所有操作都在主线程上运行)。

答案 1 :(得分:0)

Coredata起初可能有点矫枉过正,但随着您的应用程序的增长,您的数据模型也会增长。 CoreData专为此类更改而设计。

只要对象符合NSCoding协议,NSUserDefaults就会存储任何内容,但它并不意味着存储大量信息。除此之外,在NSUserDefaults中获取数据可能很困难,而在CoreData中则相当容易。另请注意,在NSUserDefaults中存储对象时,对象之间的关系无法管理。