获取NSUserDefaults时崩溃

时间:2011-04-08 20:32:11

标签: iphone objective-c cocoa-touch ios nsuserdefaults

以下代码让我崩溃

 [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

我检查过并发现NSUserDefaults中没有名称为2453的密钥。我是第一次运行应用程序所以这个密钥不会存在,但会在稍后的时间点添加。如何忽略这次崩溃。

3 个答案:

答案 0 :(得分:2)

如果这一行

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

是崩溃的行,您可以尝试使用

NSDictionary *dict = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"2453"] != nil)
    dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

if (dict) {
    ...
}

我的预感是,在这种情况下,dictionaryForKey在幕后调用objectForKey并盲目地尝试将nil投射到NSDictionary,我想,导致崩溃。但是,如果首先检查自己是否存在该键的任何对象,则可以避免崩溃。给它旋转并报告回来! : - )

答案 1 :(得分:0)

 [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
 //                                                      ^^    ^

-dictionaryForKey: must be an NSString中的“关键字”。它不能是int。因此,虽然您提供的密钥仅包含数字,但您仍然必须使用@"..."传入字符串。密钥不存在的事实与崩溃无关。

答案 2 :(得分:0)

if ([[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]) {
    // this line will only be reached if there is something for @"2453"
}