NSUserDefaults不保存在iOS7中?

时间:2013-11-23 20:47:32

标签: ios ios7 nsuserdefaults

在iOS6中,以下代码可以正常工作。第一次启动后,hasLoaded BOOL为YES。

BOOL hasLoaded = [[NSUserDefaults standardUserDefaults] boolForKey:kUserDefaultFirstLaunch];

    if (!hasLoaded){
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kUserDefaultFirstLaunch];
        [[NSUserDefaults standardUserDefaults] synchronize];

       //do first launch stuff

    }

但是在iOS7中,每次运行应用程序时,hasLoaded都是NO,即使我明确将其设置为YES并进行同步。我已经看过其他一些关于此的帖子但没有解决方案。这将是一个巨大的错误,我不能相信它真的是一个苹果bug。请告诉我,我错了。在iOS7上没有应用程序能够可靠地使用NSUserDefaults,这是真的吗?

我已经在模拟器和设备上对此进行了测试。

3 个答案:

答案 0 :(得分:2)

在查看Preferences文件夹中的com.domain.myapp.plist文件后,我看到kUserDefaultFirstLaunch实际上是“2”,这既不是真的也不是假的。事实证明我在其他地方使用kUserDefaultFirstLaunch密钥输入错字。

愚蠢的错误,但我很高兴这不是SDK中的错误。

答案 1 :(得分:0)

我遇到了同样的问题,我认为将以下内容添加到Application Delegate是修正了它的问题:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}

答案 2 :(得分:-1)

将您的值以字符串(或根据您的要求的任何其他值)取出,并将字符串保存在用户默认值

NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults];        
NSString *str=[NSString stringWithFormat:@"%@",[dicUser objectForKey:@"device_token"]];
[userdefault setObject:str forKey:@"YOURKEY"];