【发布时间】:2008-11-20 23:44:06
【问题描述】:
我正在编写一个 iPhone 应用程序,需要保存我的应用程序的状态(5K 左右)。
我主要担心的是数据在升级过程中仍然存在。我使用的一些应用程序显然有这个错误,我不想这样做!
【问题讨论】:
标签: iphone objective-c
我正在编写一个 iPhone 应用程序,需要保存我的应用程序的状态(5K 左右)。
我主要担心的是数据在升级过程中仍然存在。我使用的一些应用程序显然有这个错误,我不想这样做!
【问题讨论】:
标签: iphone objective-c
要保存状态,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 是一个不错的选择。您还可以将字典或数组保存到您的应用程序 Documents 文件夹中,然后在启动时重新加载该文件。
SQLite 很好,但除非您有大量数据要查询,否则仅保存状态就有点过头了。
【讨论】:
我使用 sqlite 来存储所有应用程序数据和首选项。为确保更新不会擦除数据,请确保 sqlite 文件存储在应用程序的 Documents 目录中,该目录不会被升级覆盖。 Apple 提供的一些示例代码(我认为是“SQLite Books”)具有处理此问题的代码。
【讨论】:
对于少量数据,NSUserDefaults 是一个完美的解决方案,如果您需要对数据进行临时查询,那么 sqlite 是您的最佳选择。这两种解决方案非常适合在设备上存储数据,如果您需要更大的灵活性和功能,您可以考虑远程数据,即 Web 服务和服务器数据库。
【讨论】:
Here 是一个讨论链接,它提供了一个很好的示例,说明如何访问您的数据以及在某些情况下哪种类型的存储方案更有益。 @Ben Gottlieb 的解决方案是正确的,我只是认为这个问题会增加一个额外的资源。希望这会有所帮助!
【讨论】:
保存状态(数据、应用程序信息等)的最常用方法是使用Sqlite3。我不确定更新将如何擦除它,但更新过程可能会覆盖数据文件。
另一种选择是使用 UserPrefs (NSUserDefaults)。同样,我不确定它的最大大小,或者即使它是否适合您需要保留的数据。
【讨论】: