我的课程中有一些代码可以从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];
我不确定问题是什么
在一些崩溃事件中,控制台中甚至没有崩溃报告。
由于
答案 0 :(得分:9)
根据文档,“如果指定的密钥不存在,则此方法返回0”。因此,即使您尚未设置它,integerForKey也将始终返回NSInteger。
编辑: 现在你已经编辑了你的问题,我可以看到问题所在。您正在发布NSUserDefaults。没有理由这样做。从代码中删除[release]行。
[NSUserDefaults standardUserDefaults]返回单例类。你不拥有它,所以你不应该发布它。如果您对何时保留/释放感到困惑,请查看Apple Memory Mangement Rules。