iPhone上保存数据的最佳方式

30

我正在编写一款iPhone应用程序,需要保存我的应用程序的状态(约5K)。

我最担心的是数据在升级时能否持久化。一些我使用的应用程序明显做错了这个事情,我不想重蹈覆辙!

7个回答

32

要保存状态,NSUserDefaults是一种好方法。我相信绝大多数,如果不是全部,应用程序数据在升级后被删除的情况都是由于AppStore上的问题引起的。这些问题可能与数据格式更改有关,但如果您只使用NSUserDefaults和标准的plist可存储对象(NSString、NSDictionary、NSNumber、NSArray、NSNumber和基本类型),那么您就应该是安全的。


我被告知应用程序数据将在更新过程中保留。这里有一个链接可以查看更多信息:https://dev59.com/rGsz5IYBdhLWcg3w_NED。哪个是正确的? - barfoon
需要注意的是,某些使用NSUserDefaults的方式可能会导致应用程序被拒绝提交到App Store。建议仅按照预期使用它,即用于应用程序用户首选项。 - MetaGuru
@ioSamurai 你有相关的资料吗?我看到大多数应用程序都将其用于短期数据存储。 - Allison

17

有一种简单的方法可以做到这一点。要保存:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"TextToSave" forKey:@"keyToFindText"];

加载:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *textToLoad = [prefs stringForKey:@"keyToFindText"];

重要的是不要在 NSUserDefaults 中存储非常大的值。如果这样做,可能会在苹果审核时遇到问题。

通常情况下,用户默认设置用于存储短键和首选项,例如用户音量级别、是否想使用游戏中心或发送崩溃日志。


6

这真的取决于你要做什么以及你的需求。

如果只有少量数据,NSUserDefaults是一个很好的选择。您还可以将字典或数组保存到您的应用程序文档文件夹中,然后在启动时重新加载该文件。

SQLite非常棒,但除非您需要查询大量数据,否则仅保存状态就有点过了。


4

我使用sqlite来存储所有应用程序数据和首选项。为了确保更新不会擦除数据,请确保将sqlite文件存储在应用程序的Documents目录中,该目录不会被升级覆盖。苹果提供的一些示例代码(我认为是“SQLite Books”)具有处理此问题的代码。


2

对于小量数据,NSUserDefaults是一个完美的解决方案;如果需要对数据进行特定查询,则可以使用sqlite。这两种方案都非常适合在设备上存储数据。如果您需要更灵活和强大的存储方式,则可以考虑远程数据,例如Web服务和服务器数据库。


1

这里有一个讨论链接,提供了一个非常好的示例,说明如何访问您的数据以及在特定情况下哪种存储方案更有利。@Ben Gottlieb的解决方案很到位,我只是觉得这个问题会增加另一个资源。希望这可以帮助到您!


0

保存状态(数据、应用程序信息等)最常见的方法是使用Sqlite3。我不确定更新会如何清除它,但更新过程可能会覆盖数据文件。

另一个选项是使用UserPrefs(NSUserDefaults)。同样,我不确定它的最大大小,甚至不确定它是否适合您需要持久化的数据。


我认为你是指NSUserDefaults。 - Chris Lundie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接