iOS用户默认值-如果我打算使用integerForKey:从默认值检索原语,是否需要使用setInteger:forKey:?
我正在尝试解包一本字典并将其存储在用户默认值中。字典包含字符串和数字/布尔 在我的用例中,我使用iOS用户默认值-如果我打算使用integerForKey:从默认值检索原语,是否需要使用setInteger:forKey:?,ios,objective-c,iphone,nsuserdefaults,Ios,Objective C,Iphone,Nsuserdefaults,我正在尝试解包一本字典并将其存储在用户默认值中。字典包含字符串和数字/布尔 在我的用例中,我使用intergerworkey:和boolfworkey: 对于这个用例,我需要使用setInteger:forKey:以用户默认值存储数字,还是可以使用generic setObject:forKey:并给它一个数字*? - (void)configureWithJSON:(NSDictionary *)conf { NSUserDefaults *defaults = [N
intergerworkey:
和boolfworkey:
对于这个用例,我需要使用setInteger:forKey:以用户默认值存储数字,还是可以使用generic 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"]?
您可以在NSNumber类中添加数字和布尔值,并将其保存为默认对象
[defaults setObject:[NSNumber numberWithInt:intValue] forKey:@"timeout"];
或
最后,没关系,两者都会起作用。然后可读性开始发挥作用,
setInteger
确实比setObject
更清楚地表达了意图 您确定您的字典包含整数和布尔值吗?Afaik字典只能包含对象。这意味着NSNumber对象表示布尔或整数。您可能会收到一个NSNumber对象
您可以直接保存NSNumber对象以及所有其他属性,而无需通过SETINTEGER进行转移。将NSNumber分别转换为int或bool并在稍后从属性存储中获取它们时将其转换回NSNumber是没有意义的
简称:
追求
我的意思是,字典所基于的JSON文件具有整数和布尔值。字典本身会将它们包装在对象中。我对是否需要在存储之前显式地打开它们感兴趣。
[defaults setObject:[NSNumber numberWithBool:boolValue] forKey:@"timeout"];
[defaults setObject:timeout forKey:@"timeout"];