【问题标题】:NSUserDefaults do not save in iOS7?NSUserDefaults 不保存在 iOS7 中?
【发布时间】:2013-11-23 20:47:31
【问题描述】:

在 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 并进行同步。我看过其他几篇关于此的帖子,但没有解决方案。这将是一个巨大的错误,我无法相信它真的是苹果的错误。请告诉我我错了。在 iOS7 上真的没有应用可以可靠地使用 NSUserDefaults 吗?

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

【问题讨论】:

  • 该代码在我的 iOS 7 模拟器上按预期工作。
  • 您查看过NSUserDefaults 文件吗?
  • 检查用户默认文件是一个很好的建议(您可以在应用程序包的库/首选项中找到它)。 - 只是为了确保:那是你真正的未经修改的代码吗? kUserDefaultFirstLaunch 是如何定义的?您是否使用不包含任何其他内容的新应用对其进行了测试?
  • 在运行时检查dictionaryRepresentation也有助于发现错误值。

标签: ios ios7 nsuserdefaults


【解决方案1】:

查看 Preferences 文件夹中的 com.domain.myapp.plist 文件后,我发现 kUserDefaultFirstLaunch 实际上是“2”,既不是真也不是假。原来我在其他地方使用了 kUserDefaultFirstLaunch 键的拼写错误。

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我认为将以下内容添加到 Application Delegate 可以解决问题:

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

    【讨论】:

    • 感谢您的建议。我刚试了,还是不行。
    【解决方案3】:

    将您的值放入字符串(或根据您的要求的任何其他值)并将字符串保存在用户默认值中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 2015-09-24
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多