在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,这是真的吗?
我已经在模拟器和设备上对此进行了测试。
答案 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"];