19

我尝试向/从 写入/读取值[NSUserDefaults standardUserDefaults],但它似乎不起作用。我的代码是:

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

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

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

4

4 回答 4

26

我只是有同样的问题。NSUserDefaults第一次运行 iOS8 或 9 模拟器然后运行 ​​iOS10 模拟器时似乎存在问题。重新启动mac为我解决了这个问题。

于 2016-06-15T16:38:10.217 回答
6

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

在 Xcode 8 beta 2 – IDE 中解决

模拟器

  • NSUserDefaults 在 iOS 10 模拟器中正常运行,无论您之前是否启动过 iOS 8 或 iOS 9 模拟器。(25974372)

Xcode 8 Beta 2 发行说明

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

于 2016-07-05T18:54:21.867 回答
3

更新:

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


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

重新启动设备可能会解决此问题。

于 2016-11-29T09:02:24.783 回答
1

我只是有同样的问题。第一次运行 iOS8 或 9 模拟器然后运行 ​​iOS10 模拟器时,NSUserDefaults 似乎存在问题。重新启动mac为我解决了这个问题。shareeditflag 确认。关闭并重新打开模拟器不起作用,但重新启动为我修复了它。

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

于 2016-07-28T15:45:01.533 回答