iOS10、NSUserDefaults不起作用

iOS 10, NSUserDefaults Does Not Work

我尝试 write/read 值 to/from [NSUserDefaults standardUserDefaults],但它似乎不起作用。我的代码是:

[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"];
return defaultsValue;

此代码 returns nil,适用于 Xcode 8.0 beta 和 iPhone 6s (10.0) 模拟器。 但是它 returns sampleString 对于 Xcode 8.0 beta 和 iPhone 6s (9.1) 模拟器

我正在使用新系统测试我的应用程序。难道我做错了什么?或者有解决方法吗?或者这只是一个 "beta" 问题?

我刚遇到同样的问题。当首先 运行 iOS8 或 9 模拟器然后 iOS10 模拟器时,NSUserDefaults 似乎有问题。 重新启动 mac 为我解决了这个问题。

这是 Xcode 8 Beta 1 附带的 iOS 模拟器的错误。它已在 Beta 2 中修复:

Resolved in Xcode 8 beta 2 – IDE

Simulator

  • NSUserDefaults function correctly in the iOS 10 Simulator, regardless of whether you have previously booted the iOS 8 or iOS 9 Simulator. (25974372)

Xcode 8 Beta 2 Release Notes

更新到 Xcode 8 Beta 2 以避免每次都必须重新启动主机 Mac。

我刚刚遇到了同样的问题。当首先 运行 iOS8 或 9 模拟器然后 iOS10 模拟器时,NSUserDefaults 似乎有问题。重新启动 mac 为我解决了这个问题。 共享编辑标志 确认的。关闭并重新打开模拟器不起作用,但重新启动为我修复了它。

根据 Apple (apple link ) WWDC 种子:运行 多个 iOS 模拟器可能导致 NSUserDefaults 无法工作 运行 iOS 8 或 9模拟器后跟 iOS 10 模拟器将导致 NSUserDefaults 在模拟器中停止工作。这可以通过重新启动主机来解决 Mac.

更新:

如果启用了数据保护,synchronize 应用程序进入后台时也可能会失败。


我们在 真实设备 运行 iOS 10.1.1 上遇到了这个问题。可以读取旧值,但无法将新更改保存到磁盘,synchronize 方法总是失败。

重启设备可能会解决这个问题。