我正在尝试解压缩字典并将其存储在用户默认值中。字典包含字符串和数字/ bools。
在我的用例中,我正在使用intergerForKey:
和boolForKey:
检索数字
对于这个用例,我是否需要使用setInteger:forKey:在用户默认值中存储数字,或者我可以使用泛型setObject:forKey:并给它一个数字*?
- (void)configureWithJSON:(NSDictionary *)conf {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *timeout = (NSNumber *)conf[@"timeout"];
if(timeout != nil) {
[defaults setInteger:[timeout intValue] forKey:@"timeout"];
}
//OR
[defaults setObject:timeout forKey:@"timeout"];
}
//then, in code I use
[defaults boolForKey:@"timeout"]?
答案 0 :(得分:1)
您可以在NSNumber类中添加数字和bool,并将其保存为默认值作为对象。
[defaults setObject:[NSNumber numberWithInt:intValue] forKey:@"timeout"];
或者
[defaults setObject:[NSNumber numberWithBool:boolValue] forKey:@"timeout"];
答案 1 :(得分:1)
最后,没关系,两者都有效。然后,可读性就开始了,setInteger
确实比setObject
更明确地表达了意图。
答案 2 :(得分:1)
您确定您的词典包含整数和布尔值吗? Afaik词典只能包含对象。这意味着NSNumber对象代表bool或整数。显然你会收到一个NSNumber对象。
您可以直接保存NSNumber对象以及所有其他属性,而无需通过setInterger转移。将NSNumber分别转换为int或bool并将它们从属性存储中获取后转换回NSNumber是没有意义的。
短: 转到
[defaults setObject:timeout forKey:@"timeout"];