オブジェクトのプロパティがアーカイブとアーカイブ解除プロセスの間で変化するとき、私は NSKeyedArchiver と NSKeyedUnarchiver に少し苦労しています。具体的な例を次に示します。
私はクラスを持っているTask
としましょう. 今、使用してアーカイブし、ファイルに書き込みます。後でファイルから読み込んで、目的の場所に戻ることができます。問題は、新しいプロパティを取得し、物事を面白くするために 1 つを失うときに発生します。name
desc
NSString
NSKeyedArchiver archivedDataWithRootObject
NSKeyedUnarchiver unarchiveObjectWithData(data)
Task
これはですTask
がname
、欠落しています。さらに、 typeのプロパティを追加します。そして、シミュレーターを起動します。問題は、アーカイブされていないのは古いプロパティを持つ古いものであり、新しいものではないことです。NSString
desc
dateDue
NSDate
Task
desc
dateDue
実際には、プロパティが現在のinitFromCoder
クラスに存在しない場合を考慮し、それをデコードしようとしません。
オブジェクトをシリアル化したときと同じようにオブジェクトの正確なレプリカを作成しないように NSCoder メソッドに説明する方法はありますか (これはシリアル化/逆シリアル化の定義の一部であることに気付きました)、むしろバージョンを柔軟に変更できるようにする方法はありますか?それ?
ありがとう