iOS 10,NSUserDefaults不起作用

时间:2016-06-15 15:53:46

标签: ios objective-c nsuserdefaults xcode8 ios10

我尝试向/ [NSUserDefaults standardUserDefaults]写入/读取值,但似乎无效。我的代码是:

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

对于Xcode 8.0 beta和iPhone 6s(10.0)模拟器,此代码返回nil。 但是它会为Xcode 8.0 beta和iPhone 6s(9.1)模拟器返回sampleString

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

4 个答案:

答案 0 :(得分:25)

我遇到了同样的问题。首次运行iOS8或9模拟器,然后运行iOS10模拟器时,NSUserDefaults似乎存在问题。 重新启动mac解决了我的问题。

答案 1 :(得分:5)

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

  

已解决Xcode 8 beta 2 - IDE

     

模拟器

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

Xcode 8 Beta 2 Release Notes

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

答案 2 :(得分:3)

更新

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

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

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

答案 3 :(得分:1)

我遇到了同样的问题。当首次运行iOS8或9模拟器然后运行iOS10模拟器时,NSUserDefaults似乎存在问题。重启mac解决了我的问题。 shareeditflag 证实。关闭并重新打开模拟器并不起作用,但重新启动会为我修复它。

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