在使用 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"];
}
}
答案 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"]);
}
}
查看NSLog
,printf
和-[NSString stringWithFormat:]
的API文档以获取更多信息。