我在我的应用中使用此代码:
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"First_RUN"] == NULL) {
[self tutorial:nil];
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"First_RUN"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
我正在使用此代码来了解应用程序第一次运行的时间,如果是这种情况我会显示教程。 升级到9.3.1后,我发现它已停止工作,因此每次应用程序运行时都会出现教程。 试图调试这个,但似乎[NSUserDefaults standardUserDefaults]刚刚停止工作。
我在这个应用程序中使用旧的Xcode(6.4)。以另一种方式使用[NSUserDefaults standardUserDefaults]或对此问题进行解释的任何帮助都会有所帮助(我的许多应用程序中都有这种代码,现在它们全部中断了。)
只是为了说清楚。这段代码完全适用于iOS 9.3,但不适用于iOS 9.3.1,我猜有些东西被破坏或改变了。
更新:我为此创建了一个测试项目(以隔离问题),似乎模拟器很好,但即使使用Xcode 7.3在9.3.1设备上运行同样的问题:https://sidan5@bitbucket.org/sidan5/nsuserdefaultsdemo.git
答案 0 :(得分:1)
Apple建议注册默认值以获得可靠的默认状态。
尽快插入AppDelegate
awakeFromNib
或applicationWill/DidFinishLaunching
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *defaultValues = @{@"First_RUN" : @NO};
[defaults registerDefaults:defaultValues];
现在第一次运行时密钥始终为NO
,您可以编写
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:@"First_RUN"] == NO) {
[self tutorial:nil];
[defaults setBool:YES forKey:@"First_RUN"];
}
使用布尔值或整数值,您始终可以使用NO / 0
/ boolForKey:
而不是integerForKey:
或NULL
来测试nil
:
如果布尔/整数值与用户中的defaultName相关联 默认值,返回该值。否则,返回NO / 0.
答案 1 :(得分:0)
显然删除应用并重新安装即可解决问题。我想当NSUserDefaults从9.3升级到9.3.1时出现了问题