我正在编写一款iPhone应用程序,需要保存我的应用程序的状态(约5K)。
我最担心的是数据在升级时能否持久化。一些我使用的应用程序明显做错了这个事情,我不想重蹈覆辙!
我正在编写一款iPhone应用程序,需要保存我的应用程序的状态(约5K)。
我最担心的是数据在升级时能否持久化。一些我使用的应用程序明显做错了这个事情,我不想重蹈覆辙!
要保存状态,NSUserDefaults是一种好方法。我相信绝大多数,如果不是全部,应用程序数据在升级后被删除的情况都是由于AppStore上的问题引起的。这些问题可能与数据格式更改有关,但如果您只使用NSUserDefaults和标准的plist可存储对象(NSString、NSDictionary、NSNumber、NSArray、NSNumber和基本类型),那么您就应该是安全的。
有一种简单的方法可以做到这一点。要保存:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"TextToSave" forKey:@"keyToFindText"];
加载:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *textToLoad = [prefs stringForKey:@"keyToFindText"];
重要的是不要在 NSUserDefaults
中存储非常大的值。如果这样做,可能会在苹果审核时遇到问题。
通常情况下,用户默认设置用于存储短键和首选项,例如用户音量级别、是否想使用游戏中心或发送崩溃日志。
这真的取决于你要做什么以及你的需求。
如果只有少量数据,NSUserDefaults是一个很好的选择。您还可以将字典或数组保存到您的应用程序文档文件夹中,然后在启动时重新加载该文件。
SQLite非常棒,但除非您需要查询大量数据,否则仅保存状态就有点过了。
我使用sqlite来存储所有应用程序数据和首选项。为了确保更新不会擦除数据,请确保将sqlite文件存储在应用程序的Documents目录中,该目录不会被升级覆盖。苹果提供的一些示例代码(我认为是“SQLite Books”)具有处理此问题的代码。
对于小量数据,NSUserDefaults是一个完美的解决方案;如果需要对数据进行特定查询,则可以使用sqlite。这两种方案都非常适合在设备上存储数据。如果您需要更灵活和强大的存储方式,则可以考虑远程数据,例如Web服务和服务器数据库。
这里有一个讨论链接,提供了一个非常好的示例,说明如何访问您的数据以及在特定情况下哪种存储方案更有利。@Ben Gottlieb的解决方案很到位,我只是觉得这个问题会增加另一个资源。希望这可以帮助到您!
保存状态(数据、应用程序信息等)最常见的方法是使用Sqlite3。我不确定更新会如何清除它,但更新过程可能会覆盖数据文件。
另一个选项是使用UserPrefs(NSUserDefaults)。同样,我不确定它的最大大小,甚至不确定它是否适合您需要持久化的数据。