我有一个 UIViewController 供用户输入他们的数据并提交给我们的 ASP.NET Webapi。大约有 40 个 textField 和其他控件。
有什么方法可以在本地保存输入。直到用户点击提交按钮,数据才会被清除。我希望数据仍然存在,甚至重启手机或重启程序。 以 XML 格式保存?
最佳答案
有很多选项可供您选择,复杂程度如下:
使用NSKeyedArchiver保存到本地文件系统。这涉及使您的模型类符合 NSCoding协议(protocol)。
使用 sqlite 和本地数据库。 C api 可能非常冗长,但是有一个很好的 Objective-C 包装器称为 FMDB .
使用 CoreData .这涉及创建本地数据模型(对象模式),然后指示 CoreData 将对象持久保存到其存储中。存储通常是 sqlite 数据库(包括 ACID 合规性——例如事务、原子性等),但 CoreData 也知道如何处理二进制和 XML 格式。
无论您使用哪种方法,我都建议使用 Data Access Object (DAO) 设计模式,它为持久化方法提供协议(protocol)。示例:
- (Customer*) findCustomByLastName:(NSString*)lastName
- (void) save:(Customer*)customer
. .通过这种方式,可以从一种非常简单的持久性风格开始,测试您的整体架构如何集成到一个有凝聚力的应用程序中,然后稍后换成另一种更健壮的风格。 Here's an example of a file-system DAO using NSKeyedArchiver .
其他方法:
- ActiveRecord pattern 是 Data Access Object 的替代品,并且有一些非常流行且得到良好支持的库通过 CoreData 提供此功能。使用 ActiveRecord 模式或 DAO 模式,但您可能应该避免将所有持久性代码转储到您的 View Controller 中! ;)
- 尼克·洛克伍德 created a nice utility to make working with NSKeyedArchiving easy .
- 对于简单的情况,您还可以使用 NSUserDefaults
- 如果需要安全性,您可以保存到钥匙串(keychain)。同样,API 有点低级,但是有很好的包装器。 Here's one .
- 自 NeXTSTEP 时代以来,NSDictionary提供了将自身以各种格式序列化到磁盘的方法。现代格式包括 XML、JSON、二进制。 (还有一些时髦的遗留格式,仍然可以读取,但不推荐用于写入……例如 Xcode 用来保存其 project.pbxproj 文件的格式)。
关于ios - 本地存储数据 IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951334/