接收 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 时崩溃(保存数据)的主要内容,如果未能解决你的问题,请参考以下文章

设置 NSUserDefault 崩溃

我可以根据另一个 NSUserDefault 值保存 NSUserDefault 值吗?

如何在 NSUserDefault 中保存我的数据类型?

NSUserDefault的使用

NSUserDefault 有时不会保存自己

谈谈大家熟悉的NSUserDefault