MyDTO をアーカイブすると、iOS 6 と iOS 7 でアーカイブの値が異なります。
なぜこれが起こるのですか?
MyDTO.h
@property (nonatomic, strong) NSString *aaa;
@property (nonatomic, strong) NSString *bbb;
MyDTO.m
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:_aaa forKey:@"aaa"];
[encoder encodeObject:_bbb forKey:@"bbb"];
}
マイメソッド
- (void)test {
MyDTO *myDTO = [[MyDTO alloc] init];
myDTO.aaa = @"1";
myDTO.bbb = @"2";
//data is different in iOS 6 and iOS 7
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myDTO];
}
編集
以下の手順でエラーが発生します。
- DTO のアーカイブ (iOS 6)
- OSのバージョンアップ (iOS 6 -> iOS 7)
- DTO (iOS 7) のアーカイブ解除 <- エラー!
エラーログ
[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x48, 0xfffffff2, 0xffffffd7, 0xffffff89, 0xffffff80, 0xffffffa8, 0x70, 0xffffff8d)
次の手順では正常です。
- DTO のアーカイブ (iOS 6)
- DTO のアーカイブ (iOS 6)
また
- DTO のアーカイブ (iOS 7)
- DTO のアーカイブ (iOS 7)
アーカイブの価値が違うからだと思いました。