NSUserDefaults:检测nil

jar*_*ryd 1 iphone nsuserdefaults

我的类中有一些代码可以从NSUserDefaults中读取

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
score = [defs integerForKey:@"score"];
Run Code Online (Sandbox Code Playgroud)

这会导致崩溃.

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

我如何检查它是否为零?

编辑.

存储到NSUserDefaults时,以下代码会导致崩溃.

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
    [defs setInteger:0 forKey:@"score"];
    [defs setInteger:3 forKey:@"lives"];
    [defs release];
Run Code Online (Sandbox Code Playgroud)

我不知道是什么问题

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

谢谢

lxt*_*lxt 9

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

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

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