如何保存/加载NSUserDefaults以进行备份?

时间:2011-12-20 22:26:56

标签: iphone objective-c ios cocoa-touch

此代码是否正确加载并保存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来保存字典内容而我遇到了问题。 我想知道这段代码是否正确,然后再去别处寻找我的问题。

2 个答案:

答案 0 :(得分: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];

上面的代码只是一个大纲,您可能需要注意保存/恢复的首选项以及顺序 - 但所有这些都取决于您的应用程序。

答案 1 :(得分:0)

// Get

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

// Set

NSDictionary *dict = ...

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