iOS用户默认值 - 我是否需要使用setInteger:forKey:如果我打算使用integerForKey从默认值中检索基元:?

时间:2014-10-01 14:03:24

标签: ios objective-c iphone nsuserdefaults

我正在尝试解压缩字典并将其存储在用户默认值中。字典包含字符串和数字/ 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"]?

3 个答案:

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