【问题标题】:NSUserDefaults standardUserDefaults stopped working using iOS 9.3.1NSUserDefaults standardUserDefaults 停止使用 iOS 9.3.1
【发布时间】:2016-04-08 09:24:11
【问题描述】:

我在我的应用程序中使用此代码:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"First_RUN"] == NULL) {
    [self tutorial:nil];
    [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"First_RUN"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

我正在使用此代码来了解应用程序第一次运行的时间,如果是这种情况,我会展示一个教程。 升级到 9.3.1 后,我发现它停止工作,因此每次应用程序运行时都会出现教程。 尝试对此进行调试,但似乎 [NSUserDefaults standardUserDefaults] 刚刚停止工作。

我正在为这个应用程序使用旧的 Xcode (6.4)。以其他方式使用 [NSUserDefaults standardUserDefaults] 的任何帮助或对此问题的解释都会有所帮助(我的许多应用程序中都有这种代码,现在都中断了)。

只是为了说清楚。这段代码在 iOS 9.3 上完美运行,但在 iOS 9.3.1 上却不行,我猜是有什么东西坏了或改变了。

更新:我为此创建了一个测试项目(以隔离问题),模拟器似乎很好,但即使使用 Xcode 7.3 在 9.3.1 设备上运行也会产生同样的问题:https://sidan5@bitbucket.org/sidan5/nsuserdefaultsdemo.git

【问题讨论】:

  • 是的,甚至把它放在 setInteger 调用之后。不工作。这个应用程序运行了多年,所以我认为有问题......
  • synchronize高估且不需要。 ;-)
  • 这似乎是一个 iOS 错误。我仍然遇到 NSUserDefaults 偶尔无法在 9.3.2 上加载的问题。 Apple 开发者论坛上有一个关于它的帖子:forums.developer.apple.com/thread/44264

标签: ios xcode6 nsuserdefaults ios9.3


【解决方案1】:

Apple 建议注册默认值以获得可靠的默认状态。

AppDelegate 中尽快插入(在awakeFromNibapplicationWill/DidFinishLaunching 中)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *defaultValues = @{@"First_RUN" : @NO};
[defaults registerDefaults:defaultValues];

现在第一次运行时,密钥总是NO,你可以写

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:@"First_RUN"] == NO) {
    [self tutorial:nil];
    [defaults setBool:YES forKey:@"First_RUN"];
}

使用布尔值或整数值,您始终可以使用 boolForKey: / integerForKey: 而不是 NULLnil 来测试 NO / 0

如果布尔值/整数值与用户中的 defaultName 相关联 默认值,该值被返回。否则返回 NO / 0。

【讨论】:

  • 你用 9.3.1 试过了吗?我的代码在 9.3 和所有以前的 iOS 版本上运行完美。在 didFinishLaunching 中添加它没有帮助。
  • @Idan 我刚刚在 9.3.1(但使用 Xcode 7)的模拟器和真实设备上测试了代码,它运行良好。
  • 我的测试项目?这里运行不好?您使用的是哪个版本?
  • 您的测试项目不包含任何自定义代码。我下载了它并添加了我建议的代码。效果很好(Xcode 7.3 - 7D175)
  • 突然有效(测试项目)但不适用于我的应用程序:(
【解决方案2】:

显然删除应用程序并重新安装可以解决问题。我猜从 9.3 升级到 9.3.1 时 NSUserDefaults 出了点问题

【讨论】:

  • 在我的情况下不起作用。已经删除了该应用程序(以及其他几个受似乎是 iOS 错误影响的应用程序)并且问题仍然存在。这里有一个关于它的持续线程:forums.developer.apple.com/thread/44264
猜你喜欢
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多