我尝试写入/读取值[NSUserDefaults standardUserDefaults],但似乎不起作用.我的代码是:
[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"];
return defaultsValue;
Run Code Online (Sandbox Code Playgroud)
nil对于Xcode 8.0 beta和iPhone 6s(10.0)模拟器,此代码返回.然而,它返回sampleStringXcode 8.0 beta和iPhone 6s(9.1)模拟器
我正在用新系统测试我的应用程序.难道我做错了什么?或者有解决方法吗?或者它只是一个"测试版"问题?
注意:我在Stack Overflow上看到很多关于在Swift NSUserDefaults中重命名的帖子UserDefaults或者在重启之前没有在模拟器上工作.无论如何,这不是重复.SO标记的许多问题来自4年前.我的问题是今年特定于iOS 10的,因为它一直适用于旧版本.我已经在我的问题中提到我的问题不是那些问题的重复,因为那些是swift中的模拟器错误,我的问题是设备目标C bug.请在标记为重复之前阅读问题
我的问题不同,因为我能够在目标C和物理设备本身上重现这一点.
我从零开始为这个测试创建了一个全新的项目.我将此代码放在viewDidLoad视图控制器中:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"checkIfInitialized"]){
NSLog(@"setting checkIfInitialized as not exist");
[[NSUserDefaults standardUserDefaults] setValue:@"test" forKey:@"checkIfInitialized"];
[[NSUserDefaults standardUserDefaults] synchronize];
self.view.backgroundColor=[UIColor redColor];
self.mylabel.text=@"NSUserDefaults was NOT there, try running again";
} else {
NSLog(@"checkIfInitialized exists already");
self.view.backgroundColor=[UIColor blueColor];
self.mylabel.text=@"NSUserDefaults was already there this time, try running again";
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行应用程序大约10次,几次它找到了checkIfInitialized,有时它没有.没有确切的数字,它失败了多少次因为它可能会工作3次然后失败2次然后工作4次而失败一次等等.
现在事情我已经注意到(虽然肯定不是100%),这一问题似乎只当我测试通过Xcode的连接发生.如果我通过点击没有Xcode的设备上的应用程序图标启动应用程序来运行,那么它似乎工作正常,但我无法100%确定.
我注意到有时出现这个错误:
[User Defaults] Failed to write value for key checkIfInitialized in CFPrefsPlistSource<0x1700f7200> (Domain: com.xxxx.appname, User: kCFPreferencesCurrentUser, ByHost: No, Container: …Run Code Online (Sandbox Code Playgroud)