2011-12-20 46 views
0

此代码是否正确加载并保存NSUserDefaults。如何保存/加载NSUserDefaults用于备份目的?

// Load 
    NSDictionary *dict = [[NSUserDefaults standardUserDefaults] 
     dictionaryRepresentation]; 

// Save 
    NSDictionary *dict = .... 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults registerDefaults:dict]; 
    [defaults synchronize]; << Not sure if this is needed 

我使用JSON来保存字典内容,我有问题。 我只想知道这段代码是否正确,然后再向别处寻找我的问题。

回答

1

负载代码将让你所有当前的默认值的字典。

[注意这可能会比您预期的要大得多,因为Mac OS安装了大量的默认设置,您可能希望将其设置得更小。例如,你可以限制字典只在您的域名不同的默认其注册默认情况下使用:

NSDictionary *userDefaults = [[NSUserDefaults standardUserDefaults] persistentDomainForName:@"<your bundle identifier>"]; 

注完]

保存代码可能不做你的期望,它会安装你正在恢复的值,因为这些键的默认值为 - 所以如果你支持“恢复到默认设置”或类似的东西,那么这些就是可能产生的值。你可能想这样做,设置的加密密钥的当前值是什么,这可以用一个简单的循环来完成:

NSDictionary *dict = .... 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
foreach(id key in dict) 
    [defaults setObject:[dict objectForKey:key] forKey:key]; 

上面的代码仅仅是概要,您可能需要照顾什么喜好你保存/恢复以及按照什么顺序 - 但所有这些取决于您的应用程序。

+0

我唯一担心的是它使用setobject,而我在地方使用seinteger,也会设置对象覆盖。话虽如此,为什么setsetger如果setobject会这样做。 – Jules 2011-12-21 06:43:25

+0

“NSUserDefaults”后面的数据结构存储对象,通过读取文件创建的“NSDictionary”也存储对象,因此使用'setObject:'。在整数值的情况下,存储的实际对象是“NSNumber”。 'setInteger',以及其他基元类型设置器和getter是便利的方法,它们将(从)/作为对象的原始值包裹起来。 – CRD 2011-12-21 08:29:03

0
// Get 

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"myDictionary"]; 

// Set 

NSDictionary *dict = ... 

[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"myDictionary"]; 
+0

我有很多设置我试图一次做所有。 – Jules 2011-12-21 06:44:19