在本地存储数据IOS

时间:2014-04-09 01:47:19

标签: ios caching storage

我有一个UIViewController供用户输入他们的数据并提交给我们的ASP.NET Webapi。大约有40个textField和其他控件。

有什么方法可以在本地保存输入。在用户单击“提交”按钮之前,数据将不会被清除。我希望数据仍在那里,甚至重启手机或重启程序。 以XML格式保存?

3 个答案:

答案 0 :(得分:6)

您可以选择多种选项,其复杂程度如下:

  • 使用NSKeyedArchiver保存到本地文件系统。这涉及使您的模型类符合NSCoding协议。

  • 使用sqlite和本地数据库。 C api可能非常冗长,但有一个很好的Objective-C包装器叫FMDB

  • 使用CoreData。这涉及创建本地数据模型(对象模式),然后指示CoreData将对象持久化到其存储。存储通常是一个sqlite数据库(包括ACID合规性 - 例如事务,原子性等),但CoreData也知道如何进行二进制和XML格式。

无论您使用哪种方法,我建议使用Data Access Object(DAO)设计模式,该模式为持久性方法提供协议。示例:

- (Customer*) findCustomByLastName:(NSString*)lastName
- (void) save:(Customer*)customer

。 。以这种方式,它可以从一种非常简单的持久性风格开始,测试你的整体架构如何集成到一个有凝聚力的应用程序,然后交换另一个更健壮的风格。 Here's an example of a file-system DAO using NSKeyedArchiver

其他方法

  • ActiveRecord模式是数据访问对象的替代方案,并且有一些非常流行且受到良好支持的库可以为此提供CoreData。使用ActiveRecord模式或DAO模式,但您可能应该避免仅在视图控制器中转储所有持久性代码! ;)
  • Nick Lockwood created a nice utility to make working with NSKeyedArchiving easy
  • 对于简单的情况,您也可以使用NSUserDefaults
  • 如果需要安全性,您可以保存到钥匙串。 API再次有点低级,但是有很好的包装器。 Here's one
  • 自NeXTSTEP时代以来,NSDictionary提供了以各种格式将自身序列化为磁盘的方法。现代格式包括XML,JSON,二进制。 (并且有一些时髦的遗留格式,仍然可以读取,但不赞成写作。例如Xcode用来保存其project.pbxproj文件)。

答案 1 :(得分:1)

您可以将数据存储在NSUserDefaults或SQLite数据库中。我建议使用SQLite,但这完全取决于您的需求。有关如何在YouTube / apple dev文档

上执行此操作的大量教程

答案 2 :(得分:1)

查看Realm

  

直接在手机,平板电脑或可穿戴设备内运行的移动数据库。   Realm可让您更快地构建应用程序,构建更快的应用程序,   并制作以前不可能的经历。