当前位置:  开发笔记 > IOS > 正文

NSUserDefaults objectForKey有时为零

如何解决《NSUserDefaultsobjectForKey有时为零》经验,为你挑选了1个好方法。

我刚刚注意到,我的一个键**NSUserDefaults** 经常会返回nil.似乎大约一半的时间是正确的,另一半则不是.我说有一半的时间,但我不是说它的翻转,只有40-50%,我觉得它不起作用.当我写初始值时,我立即调用同步.我使用此密钥作为新用户注册时设置的应用程序修订版.

以下代码返回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);

我不知道为什么会这样.我在连接到Xcode 8.2.1的设备上运行iOS 10.有人有主意吗?谢谢

编辑:我开始与苹果谈论修复这个问题,并发现如果你已经完成了文件保护,那可能是这个问题不时出现的原因,不过苹果告诉我我的具体情况(这是我此时只能确定一个)是一个错误.这种情况是当你使用Xcode在设备上启动应用程序时,它应该不会像这样失败,偶尔也会失败.不知道何时或是否将被修复.相反,我将我的关键字符串从默认值转移到了钥匙串.



1> bgfriend0..:

这似乎是Xcode 8和/或iOS 10错误.我自己遇到了这个问题并最终将案例缩小到UserDefaults间歇性地返回nil,而实际上有关键的数据.具体来说,我设置数据一次,然后删除设置逻辑并重复执行获取逻辑,有时得到值,有时得到零.

我将Run方案更改为使用Release配置,并在没有附加调试器的设备上运行应用程序,问题就消失了,也就是说,每次执行时,get逻辑都会生成正确的值(~30次).

这是一些更多的讨论:

带有XCode 8 GM的iOS 10导致NSUserDefaults间歇性地无法正常工作

iOS 10,NSUserDefaults不起作用

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

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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有