2014-10-01 49 views
2

我试图解开一个字典并将其存储在用户默认值中。该字典包含字符串和数字/布尔。iOS用户默认 - 我需要使用setInteger:forKey:如果我打算从默认使用integerForKey检索原语:?

在我的使用情况下,我使用检索和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"]? 

回答

1

最后,没关系,既会工作。然后可读性开始进行,并且setInteger确实比setObject更明确地表达意图。

1

您可以添加的NSNumber类的数字和布尔变量并将其保存在默认为对象。

[defaults setObject:[NSNumber numberWithInt:intValue] forKey:@"timeout"]; 

或者

[defaults setObject:[NSNumber numberWithBool:boolValue] forKey:@"timeout"]; 
1

你确定你的字典包含整数和布尔值? Afaik字典只能包含对象。这意味着表示布尔或整数的NSNumber对象。当然,你会收到一个NSNumber对象。

您可以直接保存NSNumber对象以及所有其他属性,而无需通过setInterger转向。将NSNumber分别转换为int或bool并在将它们从属性存储中获取时稍后将它们转换回NSNumber是没有意义的。

简称: 转到了

[defaults setObject:timeout forKey:@"timeout"]; 
+0

我的意思是,该词典是基于JSON文件有整数和布尔值。字典本身会将它们包裹在对象中。如果在存储之前需要明确拆包,我很感兴趣。 – 2014-10-01 15:11:37