2016-06-15 39 views
17

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

[[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)模拟器。 然而,它返回sampleString为Xcode 8.0测试版和iPhone 6s(9.1)模拟器

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

+0

这对我来说看起来很好。检查NSUserDefaults的文档,看看是否有什么新东西适用于iOS 10 –

+1

在写入之后立即读取值的深刻(实用)意义是什么? – vadian

+1

@vadian这不是我的实际代码。我基本上是在第一次启动应用程序时写的,第二次阅读。示例代码只是一个测试后,我意识到它不工作。 – antonio

回答

24

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

+2

确认。关闭并重新打开模拟器不起作用,但重新启动为我修复。 –

+0

同样的问题,同样的解决方法,谢谢 – Medhi

+0

非常感谢我刚刚遇到同样的情况 – Akabrando

5

这是与iPhone模拟器中的错误,与Xcode的运8测试版1已经固定在Beta 2中:

在Xcode 8 beta 2版本中解决 - IDE

模拟器

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

Xcode 8 Beta 2 Release Notes

更新到Xcode中8 Beta 2中,以避免重新启动主机每次苹果。

1

我刚刚有同样的问题。首次运行iOS8或9模拟器,然后运行iOS10模拟器时,NSUserDefaults似乎有问题。重新启动Mac解决了我的问题。 shareeditflag 确认。关闭并重新打开模拟器不起作用,但重新启动为我修复。

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

2

更新:

如果数据保护被启用,synchronize也可以在应用程序进入背景失败。


我们有运行iOS 9.1.1一个真实设备在这个问题上。旧值可以被读取,但新的更改不能保存到磁盘,方法总是失败。

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

+0

谢谢!我希望用户的设备不是这种情况! –

+0

谢谢你,我在真实设备上面对这个问题。 – Ricardo

+0

但我有数据保护禁用。 – Ricardo