NSUserDefaults 中的数据在每次应用重启时都消失了

Data in NSUserDefaults is gone on every app restart

我看到了这种奇怪的行为,这似乎是我的具体设备或我的构建环境所特有的(我的同事在构建相同的代码时没有这个问题)。每次我从 Xcode 启动应用程序时,NSUserDefaults 中的数据都消失了。当我终止应用程序并重新启动它时,也会发生同样的情况。

我已尝试重新启动 Xcode、我的笔记本电脑、设备、清理项目和派生数据 - 没有任何帮助。我确实在更新数据后调用 synchronize(),所以它应该被保留。但事实并非如此。而且我在控制台中没有看到任何错误。

这个问题的原因是什么?我该怎么做才能修复它?这是不是一些花哨的隐藏项目设置造成的?

我也想知道调用synchronize()时数据是在重启时重置还是不保存。我可以检查保存 NSUserDefaults 的文件的内容吗?


更新: 一个有趣的细节。在模拟器中终止应用程序后,我无法再次从 Xcode 启动它(获取“The operation couldn’t be completed. (LaunchServicesError error 0.)”)。我必须使用 iOS Simulator -> Reset Content and Settings 才能再次 运行 模拟器中的应用程序。


更新 2: 我试图按照建议 here 找到 iPhone 模拟器存储 NSSharedPreferences 的文件,但它不是那里。

尝试创建一个新的 "Single View Application" 并在 didFinishLaunchingWithOptions 中添加用于保存数据的代码 NSUserDefault。查看问题是否仍然存在。

没有任何奇特的设置会禁用持久化到 NSUserDefaults 中,但是,您需要考虑的事项很少:

  1. 在从 NSUserDefaults 添加和检索对象之前,请确保归档和取消归档简单值对象以外的对象
  2. 确保您了解持久化数据的范围(应用程序、设备...),查看 NSUserDefault 中的适当方法 class。
  3. 确保您的第 3 方库没有重置 NSUserDefault,这是我的问题所在。在应用程序启动时进行调试,并尝试确定您是否在开始时和 "loose it" 时具有该值。这对我有帮助。