ios - NSUserDefaults objectForKey 有时为零

标签 ios nsuserdefaults

我刚刚注意到我的 **NSUserDefaults** 中存在一个键 经常返回 nil。好像有一半的时间 正确的,另一半不是。我说了一半,但我没有 意味着它的翻转,它只有 40-50% 我认为它不起作用。 当我写入初始值时,我立即调用同步。 我使用这个 key 作为应用程序 我在新用户注册时设置的版本。

以下代码返回 nil:

#define kDBrevision  @"revision"

NSString *rev = [[NSUserDefaults standardUserDefaults] objectForKey:kDBrevision];

当我启动应用程序并仅监控该值时(没有 写入任何 NSUserDefaults),该值有时是有效的 完全不修改 NSUserDefaults。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *r = [[NSUserDefaults standardUserDefaults] objectForKey:kDBrevision];
    NSLog(@"revision %@", r);
    _exit(1);

我不知道为什么会这样。我在我的电脑上运行 iOS 10 设备连接到 Xcode 8.2.1。有人有想法么? 谢谢

编辑: 我开始与苹果公司讨论解决这个问题并发现如果你有 文件保护已完全打开,这可能是导致此问题的原因 不时出现,但苹果告诉我,我的特殊 案例(这是我目前唯一确定的案例)是一个错误。 这种情况是当您使用 Xcode 在它应该在设备上启动应用程序时 不会像这样失败,它偶尔会失败。不知道什么时候或是否会 固定。相反,我将我的关键字符串从默认值移动到 钥匙串(keychain)。

最佳答案

这似乎是 Xcode 8 和/或 iOS 10 的错误。我自己遇到了它并最终将案例缩小到 UserDefaults 间歇性地返回 nil 而实际上有 key 的数据。具体来说,我设置了一次数据,然后去掉set逻辑,只执行get逻辑,如此反复,有时取值,有时取nil。

我将我的运行方案更改为使用发布配置,并在没有附加调试器的情况下在设备上运行该应用程序,问题消失了,也就是说,每次执行时获取逻辑都会产生正确的值(~30 次)。

这里还有一些讨论:

iOS 10 with XCode 8 GM caused NSUserDefaults to intermittently not work

iOS 10, NSUserDefaults Does Not Work

https://forums.developer.apple.com/thread/48700

https://forums.developer.apple.com/message/143155#143155

关于ios - NSUserDefaults objectForKey 有时为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41756036/

相关文章:

ios - iOS 应用程序在设备上运行时不显示图像

ios - UICollectionView 水平分页不居中

objective-c - 使用点语法设置保留属性时使用自动释放?

ios - 实体最后修改日期

ios - NSUserDefault 字符串无法检索并转换为 double

ios - Firebase 云消息传递适用于控制台,但不适用于 FCM api

ios - 如何检查用户是否首次登录 AWS Cognito?

ios - 以编程方式提取设置包 iOS 中的默认电子邮件帐户

ios - NSUserDefaults 是否包含值?

ios - 仅下载一次数据,然后可在整个应用程序中访问; NSUserDefaults 与单例