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