カスタム オブジェクトをアプリの iCloud Docs フォルダーにファイルとして保存する iOS 7 アプリケーションがあります。このために、NSCoding プロトコルを利用します。
@interface Person : NSObject <NSCoding>
@property (copy, nonatomic) NSString *name
@property (copy, nonatomic) NSString *lastName
@end
オブジェクトのシリアル化は、アプリの iOS 7 バージョンで完全に機能します。
initWithCoder
とencodeWithCoder
[NSKeyedArchiver archivedDataWithRootObject:person]
person = NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)theData]
しかし、このアプリを iOS 8 に移行する必要があり、このクラスは迅速にコーディングされ、この新しい iOS 8 バージョンのアプリ用に「名前が変更」されます。
class PersonOldVersion: NSObject, NSCoding {
var name = ""
var lastName = ""
}
オブジェクトを解凍しようとすると、次のエラーが発生しました。
*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (Person)'
Swift クラス 'PersonOldVersion' の名前を元のクラス名 ('Person') に変更しようとしましたが、それでも失敗します。
元のクラスが利用できないオブジェクトをデコードするにはどうすればよいですか?