2

NSCodingオブジェクトをエンコードし、アプリを起動するたびにデータをダウンロードする必要のない「キャッシュ」機能としてディスクに保存するために使用しています。現在、このデータをアプリの Documents フォルダーに保存していますが、アプリの更新時に削除されません。

したがって、私の懸念は、インスタンス変数を追加するなど、クラスを更新することです。そして、アプリを App Store にアップロードします。そのため、ユーザーが新しいバージョンに更新すると、Documents フォルダーに保存されている古いオブジェクトは、新しいバージョンで追加した新しいインスタンス変数なしでエンコードされます。私のアプリが起動時に保存されたオブジェクトをデコードしようとすると、ドキュメントフォルダーの「古い」オブジェクトがこの新しい変数でエンコードされていないため、失敗しますか?

この問題にどのように対処しますか? クラスを最初から「正しく」書くようにしてください。最終的にはクラスの 1 つを変更し、ディスク上に保存された古いオブジェクトを破棄する必要があると確信しています。

4

2 に答える 2

2

新しいバージョンを決定するときは、オブジェクトのファイル名またはエンコード キーを変更します。

たとえば、コレクション内のオブジェクトを「myObjectsFile」に保存している場合、新しいバージョンがある場合はファイル名「myObjectsFile2」を使用します。アプリケーションの起動時に「myObjectsFile」があるかどうかを確認し、古いオブジェクトをロードして新しいオブジェクト バージョンに移行し、移行したオブジェクトを「myObjectFile2」に保存して「myObjectFile」を削除します。

'myObjectsFile' を削除したので、次の起動時にはすべて設定されています。

于 2011-10-30T22:57:20.680 に答える
0

常にそこにあることを保証するバージョン プロパティを持つことで、オブジェクトをバージョン管理できます。

ディスクからオブジェクトを読み込んだ後は、バージョン プロパティを確認する以外は何もしないでください。(最初にバージョン プロパティの存在を確認することもできます。) 現在のコード ベースがオブジェクトのバージョンをサポートしていない場合は、単純に破棄します。

于 2011-10-30T22:39:31.067 に答える