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"];