NSUserDefaults:检测nil

时间:2011-01-09 16:19:41

标签: iphone nsuserdefaults

我的课程中有一些代码可以从NSUserDefaults

中读取
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
score = [defs integerForKey:@"score"];

这会导致崩溃。

我猜这是因为得分值为零或不存在。

如何检查它是否为零?

EDIT。

以下代码在存储到NSUserDefaults时会导致崩溃。

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
    [defs setInteger:0 forKey:@"score"];
    [defs setInteger:3 forKey:@"lives"];
    [defs release];

我不确定问题是什么

在一些崩溃事件中,控制台中甚至没有崩溃报告。

由于

1 个答案:

答案 0 :(得分:9)

根据文档,“如果指定的密钥不存在,则此方法返回0”。因此,即使您尚未设置它,integerForKey也将始终返回NSInteger。

编辑: 现在你已经编辑了你的问题,我可以看到问题所在。您正在发布NSUserDefaults。没有理由这样做。从代码中删除[release]行。

[NSUserDefaults standardUserDefaults]返回单例类。你不拥有它,所以你不应该发布它。如果您对何时保留/释放感到困惑,请查看Apple Memory Mangement Rules