0

registerDefaults を使用して、デフォルトで 2 つの文字列を持つ 1.0 アプリをビルドするとします。
バージョン 2.0 では、最初の古い文字列を削除し、2 番目の文字列 (キー文字列を変更) を新しい 3 番目の文字列と共に配列に移動することにしました。
これにどのように対処すればよいでしょうか。また、バージョンを通じてコン​​テンツに加えられた可能性のある変更にどのように対処すればよいでしょうか。

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

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

于 2011-03-26T15:46:21.020 に答える