目标C - objectForKey的问题

时间:2010-02-12 08:00:29

标签: iphone objective-c nsstring nsuserdefaults cocoa-design-patterns

好的,我正在尝试为我的应用程序编写高分功能。

我的问题是,当没有保存高分时,我的程序崩溃了。

如果我保存:

[[NSUserDefaults standardUserDefaults] setObject:@"[given string]" forKey:@"firstName"];

首先,它工作正常。但是,如果我是第一次启动该程序并尝试使用以下代码查看高分:

first = [[NSString alloc] initWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"]];
发生了不好的事情。

基本上,有没有看到firstName下是否还存在?有没有办法初始化而不删除任何可能已存在的名称?

感谢。

3 个答案:

答案 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";
}