iOS 10,NSUserDefaults 不起作用

Posted

技术标签:

【中文标题】iOS 10,NSUserDefaults 不起作用【英文标题】:iOS 10, NSUserDefaults Does Not Work 【发布时间】:2016-06-15 15:53:45 【问题描述】:

我尝试向[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) 模拟器。 但是它会为 Xcode 8.0 beta 和 iPhone 6s (9.1) 模拟器返回 sampleString

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

【问题讨论】:

这对我来说没问题。检查 NSUserDefaults 的文档,看看 ios 10 是否有新的东西 在写入值后立即读回值的深层(实际)意义是什么? @vadian 那不是我的实际代码。我基本上在应用程序的第一次启动时写,在第二次启动时阅读。示例代码只是我意识到它不起作用后的测试。 [[NSUserDefaults standardUserDefaults] 同步];...不要! 有些人将此问题标记为重复。它不是。另一个问题是关于 Swift 中的 IOS 10 API 名称更改/编译时问题。这个问题是关于运行时的 Objective-C 问题。 【参考方案1】:

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

【讨论】:

已确认。关闭并重新打开模拟器不起作用,但重新启动为我修复了它。 您也可以使用较旧的模拟器作为临时解决方案(iOS 9.2 适合我) 根据 Apple (developer.apple.com/library/prerelease/content/releasenotes/…) WWDC 种子:运行多个 iOS 模拟器可能导致 NSUserDefaults 无法工作运行 iOS 8 或 9 模拟器,然后运行 ​​iOS 10 模拟器将导致 NSUserDefaults 在模拟器。这可以通过重新启动主机 Mac 来解决。【参考方案2】:

这是 Xcode 8 Beta 1 附带的 iOS 模拟器的一个错误。它已在 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 以避免每次都重新启动您的主机 Mac。

【讨论】:

【参考方案3】:

更新:

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


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

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

【讨论】:

谢谢!我希望用户的设备上不是这种情况! 谢谢你,我在真机上遇到这个问题。 但是我禁用了数据保护。 @Ricardo 总是失败还是有时失败?可以重现吗? @BB9z 是我的错【参考方案4】:

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

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

【讨论】:

以上是关于iOS 10,NSUserDefaults 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 NSUserDefaults 在我的应用程序和共享扩展程序之间不起作用?

在 watchOS 2 中读取 NSUserDefaults(我知道 App Groups 不起作用)

使用 NSUserDefaults 时格式字符串未使用 Objective-C iOS 10 数据参数

无法保存到 iOS 7.0.2 上的 NSUserDefaults

使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作

NSUserDefaults 不起作用