HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSUserDefaults没有保存大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的精灵工具包应用程序中遇到问题,我的NSUserDefaults变量无效.在createSceneContents(我知道被调用)
if (![defaults objectForKey:@"obj"]) {
    difficultyLabel.text = @"Difficulty: Easy";
    [defaults setObject:@"Easy" forKey:@"obj"];
} else {
    difficultyLabel.text = [NSString StringWithFormat:@"Difficulty: %@",[defaults objectForKey:@"diff"]];
}

然后当您单击SKLabelNode以更改难度时,将调用代码

if ([label.text isEqualToString:@"Difficulty: Easy"]) {
            label.text = @"Difficulty: Hard";
            [defaults setObject:@"Hard" forKey:@"obj"];
            NSLog(@"%@",[defaults objectForKey:@"obj"]);

        } else {
            label.text = @"Difficulty: Easy";
            [defaults setObject:@"Easy" forKey:@"obj"];
            NSLog(@"%@",[defaults objectForKey:@"obj"]);

但是当我停止程序并再次运行时,它总是说难度:容易.有什么建议?

解决方法

如rmaddy的回答所解释的那样,NSUserDefaults不会立即将数据写入长期存储.

当你调用setObject:forKey:时,这些值会保存在临时内存中,所以如果你试图调用objectForKey:在setObject:forKey:之后,它将返回内存中的值(如果存在),如果不存在,它会去寻找什么被保存到长期存储.

后台,设备最终会将这些值保存到永久存储中.它是操作系统处理的东西,但是在应用程序的正常操作中,大多数时候没有必要立即将这些值存储到永久存储器中,所以让操作系统有时会在优化时执行此操作(I想象一下,操作系统可能会在一些固定的时间表上同时同步每个应用程序的用户认值,并且尽可能在处理器闲置时尝试执行此操作.

但就是说,正如rmaddy解释的那样,如果你有一些关键的东西需要立即保存到永久存储器中,你可以随时调用同步.请记住……只要您的应用程序在调试模式下没有被杀死,您将设置存储在用户认值中的值.

但是为了你自己,如果你想要绝对肯定,你可以调用它来在applicationDidEnterBACkground中进行同步,正如rmaddy建议的那样.但请记住,如果您终止应用程序,则不会调用方法.

大佬总结

以上是大佬教程为你收集整理的ios – NSUserDefaults没有保存全部内容,希望文章能够帮你解决ios – NSUserDefaults没有保存所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。