0

如果我使用 registerDefaults构建一个默认包含 2 个字符串的 1.0 应用程序。
在 2.0 版本中,我决定删除第一个旧字符串,并将第二个(更改其密钥字符串)与新的第三个字符串一起移动到数组中。
我该如何处理以及如何处理可能通过版本对内容进行的更改。

1.0 首选项应该是

StringKey    someValue  
DateKey      10/10/2010

1.1 首选项应该是

StringKey    someValue  
DateKey      2010/10/10

2.0 首选项应该是

Array  
    Item0 is    DateKey        10/10/2010  
    Item1 is    BadString      BadBadValue
4

1 回答 1

1

如果您在registerDefaults:应用程序的 1.0 版中使用过,这很容易。当您停止注册这些旧值并且用户没有更改它们时,它们会从 NSUserDefaults 中消失。

所以向 NSUserDefaults 询问所有应该转换的对象。如果它们存在,请将它们转换为新格式,将它们保存在 NSUserDefaults 中并删除旧值。

像这样的东西应该工作

// check if you can get the old object. if it's there it was changed by the user
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"OldKey1"]) {
    // old key is present
    id oldObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"OldKey1"];

    id newObject = ... // convert the old object to the new object
    [[NSUserDefaults standardUserDefaults] setObject:newObject forKey:@"NewKey1"];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"OldKey1"];
}
else {
    // old key not there, do nothing
}

// register your new defaults...

如果你没用过registerDefaults:,你现在有问题。因为您不知道对象是否已被用户更改,或者该对象是否只是您的默认设置。并且您不能仅仅因为它与默认值具有相同的值就假定该值仍处于默认状态。

但是在这种情况下该怎么办?我可能会将值重置为默认值并显示一个 UIAlert 告诉用户检查首选项,因为我做错了:-)

于 2011-03-26T15:46:21.020 回答