NSUserDefaults 没有正确保存
Posted
技术标签:
【中文标题】NSUserDefaults 没有正确保存【英文标题】:NSUserDefaults not saving properly 【发布时间】:2009-09-13 21:34:20 【问题描述】:我对 NSUserDefaults 有疑问,我不太明白发生了什么。
我的应用程序有 5 个级别,每个级别与 NSUserDefaults 执行完全相同的操作(检索级别默认值,在用户播放级别时更改值,然后设置默认值并在级别结束时同步)前 4水平。工作顺利,但最后一级不保存值。应用程序不会崩溃,最后一级也不是最后发生的事情,我什至在应用程序终止时同步了默认值。 NSUserDefaults 上是否有最大大小,或者有没有人能想到我没有的任何东西,我将在下面发布代码,但就像我说的前四个级别工作得很好
//header
NSUserDefaults *userData;
@property(nonatomic,retain) NSUserDefaults *userData;
//class file
//Sets the boolean variables for the class to use
userData = [NSUserDefaults standardUserDefaults];
boolOne = [userData boolForKey:@"LevelFiveBoolOne"];
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"];
boolThree = [userData boolForKey:@"LevelFiveBoolThree"];
boolFour = [userData boolForKey:@"LevelFiveBoolFour"];
boolFive = [userData boolForKey:@"LevelFiveBoolFive"];
boolSix = [userData boolForKey:@"LevelFiveBoolSix"];
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"];
//End Of Level
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"];
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"];
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"];
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"];
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"];
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"];
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"];
[userData synchronize];
当我切换到使用这些默认值的视图时,它们的值是正确的,但是当我终止应用程序并重新启动它时,这些值不会被保存,所有其他级别都会执行完全相同的过程,这是唯一不不行。
我已经盯着这个问题看了很长时间,我希望有人遇到同样的问题,并且可以给我一些关于他们如何解决它的见解。
【问题讨论】:
很难从您发布的内容中看出。仔细检查关卡后保存默认值的方法。 【参考方案1】:NSUserDefaults 可能没有机会保存,具体取决于进程的终止方式。
这个答案有更多信息:Why is NSUserDefaults not saving my values?
【讨论】:
【参考方案2】:以防万一有人遇到这种情况:在用户中存储 NSDictionary 或 NSArray(或两者的 mutable 对象)时默认值,并且它们存储了一个 NSURL 对象,它不会在同步时保存数据!
【讨论】:
【参考方案3】:你有类似的东西:
// load the default values for the user defaults
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];
// set them in the standard user defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];
如果您设置的初始默认值没有 LevelFive 默认值,则调用将失败。
检查 -synchronize 的返回值是否有错误。
【讨论】:
【参考方案4】:我决定把这个问题放在一边,继续开发,包括在第 5 级之后添加一些东西,这样用户就可以循环通过关卡并返回主菜单等等……我不知道为什么,但是userDefaults 现在正在为第 5 级保存,所以我不知道是不是因为在第 5 级之前是应用程序所做的最后一件事,即使它没有自行终止并做了其他事情,也可能实际上并没有编写默认值到磁盘...我仍然不确定出了什么问题,但它现在正在工作,我无法让它无法查看同步是否会出错...
感谢您的帮助
【讨论】:
以上是关于NSUserDefaults 没有正确保存的主要内容,如果未能解决你的问题,请参考以下文章
你可以在 NSUserDefaults 中保存 Parse 信息吗? (IOS)
NSUserDefaults setObject 第一次没有保存
NSUserDefaults 没有在 Jenkins 的模拟器中保存内存