接收 NSUserDefault 时崩溃(保存数据)
Posted
技术标签:
【中文标题】接收 NSUserDefault 时崩溃(保存数据)【英文标题】:Crash when receiving NSUserDefault (saving data) 【发布时间】:2011-02-27 23:45:01 【问题描述】:我正在尝试为 iPhone 游戏保存一些整数,但我卡住了。
我是这样保存数据的;
[[NSUserDefaults standardUserDefaults] setInteger:careerScore forKey:@"career_score"];
//Tells the userDefaults to update the data base.
[[NSUserDefaults standardUserDefaults] synchronize];
当调用正确的方法时。
我遇到的问题是首次打开游戏时加载变量。目前我有;
int careerScore = [[NSUserDefaults standardUserDefaults] IntegerForKey:@"career_score"];
问题似乎是它在第一次加载游戏时无法访问此 NSUserDefault(因为在调用正确的方法之前它不存在),然后导致崩溃。
如果它确实存在,我该如何从那里获取整数,但如果它不存在则忽略它?还是有更简单/更好的方法来保存数据?我正在使用 cocos2d。
【问题讨论】:
【参考方案1】:使用NSUserDefaults
实例的registerDefaults:
方法指定所有设置的默认值。
【讨论】:
当应用程序完成加载后,我现在注册我在 Resources 文件夹中创建的 Defaults .plist。 [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];但是,当我运行保存命令(在我的原始问题中引用)时,它不起作用。当我杀死应用程序时,它会加载一个新的而不是存储新的整数。 当我尝试运行int careerScore = [[NSUserDefaults standardUserDefaults] IntegerForKey:@"CareerScore"];
时仍然崩溃@
我现在可以使用了,谢谢,我不应该有一个大写的 I 表示整数 -.- 但你确实教会了我有关 registerDefaults 的知识:再次感谢!
当您说它“崩溃”时,您是否在错误控制台中收到任何类型的消息?你真的用小写的“i”打电话给IntegerForKey:
而不是integerForKey:
吗?【参考方案2】:
integerForKey 的小“i” 30 个字符。
【讨论】:
以上是关于接收 NSUserDefault 时崩溃(保存数据)的主要内容,如果未能解决你的问题,请参考以下文章