【问题标题】:NSUserDefaults gets resetNSUserDefaults 被重置
【发布时间】:2013-11-18 08:42:34
【问题描述】:

我有一个 ios 应用程序,最近收到了一些用户关于他们的设置被重置的报告。 使用NSUserDefaults保存设置。

我的问题是,用户默认设置是否会因某种原因损坏/重置?

关于我如何使用它的一些注意事项:

  • 当我启动我的应用程序时,我仅在使用 registerDefaults 的密钥不存在时才存储默认值(这样做是为了处理“首次安装”场景)。

    李>
  • 上述大多数报告都描述了应用程序崩溃,然后在重新打开时将设置重置为默认值。

  • 我对@9​​87654323@ 的使用非常简单——保存numbers/strings,有时阅读它们等等。没什么太花哨的。我不删除密钥。

一些代码示例:

例如,我将数据保存在不同的地方,使用:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"FirstLevel" forKey:@"Level"];
[defaults setInteger:100 forKey:@"Score"];
[defaults synchronize];

我阅读使用:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int intValue = [defaults integerForKey:@"Score"];
return intValue;

那么,有什么东西会导致用户默认值以某种方式重置/损坏吗?

更一般地说,它是否与报告的应用程序崩溃有关,即使崩溃不是直接由用户默认值写入/读取造成的?

【问题讨论】:

  • 发布一些代码会有用。
  • 请在此处添加您的代码,然后我们才能理解。究竟是什么问题。
  • 我很乐意添加一些代码,尽管它更多的是关于 NSUserDefaults 在崩溃时重置的已知问题的一般性问题。代码本身很简单,但我还是会发布一些。
  • 在将数据保存到NSUserDefaults 后,您是否在呼叫synchronise?如果您不这样做,则数据可能没有保存在数据库中,因为由于正在发生的崩溃,永远不会调用 synchronise 方法。
  • 您无需致电-synchronize“总是在保存数据后”。也许这个-synchronize方法调用一定是导致问题的地方(实际上,您需要复制崩溃场景来找出问题

标签: ios nsuserdefaults


【解决方案1】:

据我了解,只有在删除应用程序时才会将其刷出。由于您的 NSUserDefaults 的重置问题是在应用程序崩溃之前发生的,因此我将从找出崩溃问题开始。

【讨论】:

    【解决方案2】:

    如果你在你的设备中安装你的应用,NSUserDefault 将被重新初始化……当你在设备中测试你的应用时,你会将你的设备与 Xcode 连接起来,如果你运行程序,这些值将被重置……

    【讨论】:

    • 不正确。如果您删除该应用程序,然后在 Xcode 中再次运行它,它将重新安装并重新初始化默认值。但是,如果您只是再次测试应用程序而不删除,那么默认值将被保留。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2016-06-30
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多