アプリのバージョン 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を表示します:-)