2

好的,我正在尝试为我的应用程序编写一个高分函数。

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

如果我保存它:

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

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

first = [[NSString alloc] initWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"]];

坏事发生。

基本上,是否可以查看在 firstName 下是否还存在任何内容?有没有办法在不删除任何可能已经存在的名称的情况下进行初始化?

谢谢。

4

3 回答 3

3

initWithString 的 NSString 文档:说

参数

字符串

要从中复制字符的字符串。该值不能为零。

objectForKey 的文档:说

返回值

与指定键关联的对象,如果未找到键,则返回 nil。

问题似乎是当您尝试检索尚不存在的 firstName 并尝试使用它作为输入创建 NSString 时返回 nil 。

于 2010-02-12T08:41:25.707 回答
2

NSUserDefaults 实例方法registerDefaults:正是为了这个目的:您可以为您的首选项设置默认值,这些默认值将被为同一首选项键设置的任何其他值覆盖。只要确保足够早地调用它,它就会在任何需要访问您的首选项的代码之前运行。

于 2010-02-12T09:02:59.183 回答
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";
}
于 2010-02-12T08:08:09.560 回答