我尝试向/ [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
我正在使用新系统测试我的应用。难道我做错了什么?或者有解决方法吗?或者它只是一个“测试版”问题?
答案 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,以避免每次都重启主机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来解决。