NSUserDefaults standardUserDefaults对象正在被随机删除

时间:2014-07-01 20:29:07

标签: ios objective-c ios7 nsuserdefaults

我面临着NSUserDefaults非常奇怪的行为,问题是[NSUserDefaults standardUserDefaults]对象被随机删除!

我的[NSUserDefaults standardUserDefaults]包含大约65个对象(60个小NSStrings和3个数组,其中最大计数可以是4和2个其他数组,最大数量为30.注意到它在面对此问题时从未是最大的情况) ,其中一个对象是一个值,用于检查用户是否已完成注册阶段。 启动应用程序时,有时这个NSUserDefaults将只包含来自那些65的其他5个对象,其他的正在从plist中删除,即使我重新启动应用程序也不会再次出现,这会导致用户再次进入注册阶段!!

我很确定我正在使用保存功能

[[NSUserDefaults standardUserDefaults] setObject:@"Value" forKey:@"Key"]; [[NSUserDefaults standardUserDefaults] synchronize];

我搜索谷歌的类似行为没有找到任何可以帮助的东西! 有没有人遇到这样的行为,解决它的解决方案是什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

我确实想在这里提供帮助,因为我和我的一个项目有过完全相同的奇怪行为。

所以请耐心等待,我的项目发生了什么:我有一个单例类,它封装了几个属性,并且我已经覆盖了这些属性的setter和getter。在setter方法中,我得到standardUserDefaults实例并为key设置对象,并进行同步。在getter方法中,我返回键的对象。此外,我还有一个登录成功指示器值,用于指示登录是否成功。和你的问题一样,我的对象消失了。经过几天的努力,事实证明,当网络无法访问时,登录指示符被初始化为false。在指示器false子句中,我将nil对象设置为用户默认值。

我的观点是:

  • 仔细检查standardUserDefaults setObject:forKey:函数调用在逻辑上是否正确,请确保调用时 NOT nil 对象
  • 检查是否有使对象无效的逻辑(登录,网络更改等)。
  • 运行测试,找到复制问题的最小步骤。使用调试会话检查对象。 (放弃相信随机消失)

希望这能带来领先优势。