NSUserDefaults无法正常保存

时间:2009-09-13 21:34:20

标签: iphone nsuserdefaults

嘿伙计我遇到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];

当我切换到使用这些默认值的视图时,它们的值是正确的但是当我终止应用程序并重新启动它时,这些值不会保存,每隔一个级别执行完全相同的过程,这是唯一的级别不行。

我已经盯着这一段很长一段时间了,我希望那里有人遇到同样的问题,并且可以让我对他们如何解决它有所了解。

先谢谢你 BWC

4 个答案:

答案 0 :(得分:13)

NSUserDefaults可能没有机会保存,具体取决于进程的终止方式。

这个答案有更多信息:Why is NSUserDefaults not saving my values?

答案 1 :(得分:4)

以防有人在此处运行:在用户中存储 NSDictionary NSArray (或可变两者的对象)时默认值并且它们存储了 NSURL 对象,它不会在同步时保存数据!

答案 2 :(得分:2)

某处你有类似的东西:

// 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的返回值是否有错误。

答案 3 :(得分:0)

我决定将这个问题放在一边并继续开发,其中包括在第五级之后添加内容,以便用户可以循环访问级别并返回主菜单等等......我不知道为什么但是userDefaults现在保存为五级,所以我不知道是不是因为在第五级之前是应用程序做的最后一件事,即使它没有自行终止并做了其他事情也许它实际上并没有写出默认值到磁盘...我仍然不确定出了什么问题,但它现在正在工作,我无法看到它是否可以通过同步得到错误......

感谢您的帮助