【问题标题】:Data Storage options for iOSiOS 的数据存储选项
【发布时间】:2016-02-29 20:59:55
【问题描述】:

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

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

假设我的应用程序允许用户查看、添加、修改日历上的事件。

为了让应用离线工作,我只需要存储当前日期的事件。这可能在 1 到 10 个事件之间。每个事件都有一个名称、描述和其他各种小属性。

我一直在研究 coreData,想知道这对于我需要的东西是否有点矫枉过正。我不需要镜像整个数据库或类似的东西。

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

离线版本可能需要存储比上述更多的实体,所以如果数据量不大,它是一种可行的数据存储方法。

任何建议都会很棒。

【问题讨论】:

  • 您在线时如何存储数据?
  • 我的应用程序有一个完整的后端数据库,其中包含在线脚本等

标签: ios core-data nsuserdefaults


【解决方案1】:

NSUserDefaults

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

核心数据

  • 学习曲线可能有点陡峭
  • CoreData 和相关类提供了将实体放入 UITableView 的简单方法,例如 NSFetchedResultsController
  • CoreData 将许多您必须自己处理的杂乱事物(例如对象列表、一对多或多对多关系或对象属性的约束)抽象为一个单一的好干净的面向对象接口
  • CoreData 为您管理保存和撤消功能。它有一个持久存储,可以跟踪更改,并且可以在任意次数自动刷新到磁盘

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

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

【讨论】:

  • 谢谢,我认为 CoreData 是要走的路,我认为首先是 :-) 你知道 coreData 有什么好的教程吗,我找到了一些,但他们略过了很多功能。
  • CoreData 是一个非常广泛的话题,很难找到涵盖所有内容的教程。我喜欢 Ray Wenderlich 的教程。你可以看看这个raywenderlich.com/115695/…
  • 一个讲座系列和两本书...在 iTunes U 上观看 Paul Hegarty 在 iOS 上精彩的斯坦福讲座。除此之外强烈推荐阅读 1. martiancraft.com/blog/2015/03/core-data-stack; 2. 来自 The Pragmatic Bookshelf – Marcus Zarra 的“Core Data, 2nd Edition, Data Storage and Management for iOS, OS X, and iCloud”(2013 年 1 月); 3. 来自 Apress 出版商——“Pro iOS Persistence Using Core Data”,作者 Michael Privat 和 Robert Warner。
【解决方案2】:

Coredata 一开始可能有点矫枉过正,但随着您的应用程序的增长,您的数据模型也会随之增长。 CoreData 专为此类变化而设计。

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

【讨论】:

  • 实际上,NSUserDefaults 只支持属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。对于 NSArray 和 NSDictionary 对象,它们的内容必须是属性列表对象。有一种方法可以转换任何对象,实现 NSCoding 到 NSData,使用 NSArchiver,槽。
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多