integerForKey总是崩溃应用程序

时间:2009-05-12 03:04:38

标签: objective-c

在使用 setInteger:forKey 保存后,使用 integerForKey 检索 standardUserDefaults 中的值始终会导致应用崩溃。

如果我使用 objectForKey 检索值并将值转换为int,则没有错误,我可以在日志消息中显示值。但是,当我尝试将该int分配给另一个int或尝试对其执行数学函数时,如添加,它也会崩溃应用程序。

如何检索已保存到standardUserDefaults的int?我正在针对SDK 3.0进行开发,但在2.2.1中遇到了相同的问题。感谢。

prefs定义为

NSUserDefaults *prefs;
始终在savePrefs之前调用

和retrievePrefs。应用程序在退出之前还会调用[prefs synchronize]。

-(void)retrievePrefs {
    prefs = [[NSUserDefaults standardUserDefaults] retain];
    if (prefs) {
       // doesn't crash app, spits out 'page: 1'
       NSLog(@"page: %@", [prefs objectForKey:@"pageIndex"]); 

       // crashes app with no details
       NSLog(@"page: %@", [prefs integerForKey:@"pageIndex"]); 
    }
}


-(void)savePrefs {
    if (prefs) {
        [prefs setInteger:1 forKey:@"pageIndex"];
    }
}

1 个答案:

答案 0 :(得分:4)

你的第二个NSLog调用是导致它的:%@限定符用于打印出Objective-C对象或CoreFoundation CFTypeRefs,因此它将该整数解释为指针并尝试取消引用它。

您需要的是:

-(void)retrievePrefs {
    prefs = [[NSUserDefaults standardUserDefaults] retain];
    if (prefs) {
        NSLog(@"page: %@", [prefs objectForKey:@"pageIndex"]);
        NSLog(@"page: %ld", (long)[prefs integerForKey:@"pageIndex"]);
    }
}

查看NSLogprintf-[NSString stringWithFormat:]的API文档以获取更多信息。