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

标签 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 来保存字典内容,但遇到了问题。 在我在其他地方寻找问题之前,我只想知道这段代码是否正确。

最佳答案

您的Load代码将为您提供所有当前默认值的字典。

[注意这可能比您预期的要大得多,因为 Mac 操作系统安装了大量默认值,您可能希望将其缩小。例如,您可以使用以下方法将字典限制为域中与注册默认值不同的默认值:

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

上面的代码只是一个轮廓,您可能需要注意保存/恢复哪些首选项以及按什么顺序 - 但这一切都取决于您的应用程序。

关于iphone - 如何保存/加载 NSUserDefaults 以进行备份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582779/

相关文章:

ios - 一个 CIImage 中有多个 CIFilter?

iphone - 代码签名错误: The identity 'iPhone Developer: x Xxxxx' doesn't match any identity in any profile

iphone - Xcode newb -- #include 找不到我的文件

objective-c - 如何在 Interface Builder 中使用 Storyboard连接页面 View Controller 的数据源导出

ios - 为 QRCode 生成编译 ZXingObjC 代码时出现 Xcode 7.3 错误

ios - iOS 7 中的新图标

ios - UITextfield 对覆盖文本属性的错误访问

iphone - IOS 中的内存管理问题(收到内存警告。)

ios - 在没有segue的情况下在两个 View Controller 之间传递数据?

iphone - uitableview 中的 resignFirstResponder 崩溃