iPhone - 从旧应用程序首选项升级

时间:2011-03-26 15:21:05

标签: iphone plist upgrade nsuserdefaults defaults

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

1.0 Prefs应

StringKey    someValue  
DateKey      10/10/2010

1.1 Prefs应

StringKey    someValue  
DateKey      2010/10/10

2.0 Prefs应

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

1 个答案:

答案 0 :(得分:1)

如果您在应用版本1.0中使用了registerDefaults:,则很容易。当您停止注册这些旧值并且用户未更改它们时,它们将从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,告诉用户检查首选项,因为我犯了一个错误: - )