iPhone - обновление со старых настроек приложения - PullRequest
0 голосов
/ 26 марта 2011

Если я создаю приложение 1.0 с 2 строками по умолчанию, с использованием registerDefaults .
И в версии 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

1 Ответ

1 голос
/ 26 марта 2011

Если вы использовали 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, который говорит пользователю проверять настройки, потому что я сделал ошибку: -)

...