単体テストを書いていて、NSKeyedArchiver/NSKeyedUnarchiver の奇妙な動作に遭遇しました。以下は失敗したテストです。私は間違っていますか?
これは簡単なプロジェクトです: https://github.com/genesislive2007/Archiving-Headache
-(void)test {
NSData* serializedObject = [NSKeyedArchiver archivedDataWithRootObject:[Drug new]];
id deserializedObject = [NSKeyedUnarchiver unarchiveObjectWithData:serializedObject];
XCTAssertTrue([deserializedObject isKindOfClass:[Drug class]]);
}
アップデート
いくつかのログ:
NSLog(@"Class as string: %@", NSStringFromClass([deserializedObject class]));
NSLog(@"Address of the static class: %p", [Drug class]);
NSLog(@"Address of the object class: %p", [deserializedObject class]);
Archiving Headache[1638:60b] 文字列としてのクラス: Drug
Archiving Headache[1638:60b] 静的クラスのアドレス: 0x8bfd1d0
Archiving Headache[1638:60b] オブジェクト クラスのアドレス: 0x357c
上記のように、クラス記述子へのアドレスが異なります。