好的,我正在尝试为我的应用程序编写高分功能。
我的问题是,当没有保存高分时,我的程序崩溃了。
如果我保存:
[[NSUserDefaults standardUserDefaults] setObject:@"[given string]" forKey:@"firstName"];
首先,它工作正常。但是,如果我是第一次启动该程序并尝试使用以下代码查看高分:
first = [[NSString alloc] initWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"]];
发生了不好的事情。
基本上,有没有看到firstName下是否还存在?有没有办法初始化而不删除任何可能已存在的名称?
感谢。
答案 0 :(得分:3)
initWithString的NSString文档:说
<强>参数强>
ASTRING
要从中复制字符的字符串。 此值不得为零。
objectForKey的文档:说
返回值
与之关联的对象 指定的键,或者如果键是则为nil 没找到。
问题似乎是,当您尝试检索尚不存在的firstName并尝试使用它作为输入创建NSString时,返回了nil。
答案 1 :(得分:2)
NSUserDefaults实例方法registerDefaults:
就是为了这个目的:您可以为首选项设置默认值,这些默认值将被同一首选项键设置的任何其他值覆盖。只需确保尽早调用它,它将在任何需要访问您的首选项的代码之前运行。
答案 2 :(得分:1)
您可以像这样加载“第一个”:
first = [[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"] retain];
if (!first) {
// set default or do something else if there wasn't a value saved
first = @"N/A";
}