2009-09-13 124 views
6

嘿家伙我遇到的问题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

+0

难以分辨您发布的内容。仔细检查保存关卡后的默认值的方法。 – Jordan 2009-09-14 02:59:52

回答

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

0

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

感谢您的帮助

4

万一有人运行翻过这样的:当存储的的NSDictionary的NSArray在用户的默认值(或可变两者的对象),他们有一个NSURL对象存储,它不会保存synchonize上的数据!

+0

这很烦人吗?! – 2013-05-01 14:41:04