float
を値INFINITY
でアーカイブし、後でそれをアーカイブ解除する必要があります。float INFINITYはNSCoderによってアーカイブできますが、デアーカイブされません
オブジェクトアーカイブされる:
はここに私のコード例である
@interface CodeInf : NSObject <NSCoding>
@end
@implementation CodeInf
- (void)encodeWithCoder:(NSCoder *)encoder {
float inf = INFINITY;
[encoder encodeFloat: inf forKey:@"INFINITY"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
float decodedInf = [decoder decodeFloatForKey: @"INFINITY"];
}
return self;
}
@end
そして、ここでのアーカイブ/ dearchivingコードです:
CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
アーカイブの作品は、しかしdearchivingでエラーが発生します:
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSKeyedUnarchiver decodeFloatForKey:]: value (inf) for key (INFINITY) too large to fit in 32-bit float'
これはデアーチバーのバグですか?または私は何か間違っていますか?
CRDのおかげで、私はバグレポートを提出し、あなたの回避策は問題ありません! –
ねえ、ReinhardMännerはバグレポートを提出しましたが、リンクは何ですか? iOS 8.3ではfloat値のエンコード/デコードで同様のクラッシュに遭遇しました。ありがとう! – Danik
@ダニーク:2013年6月12日にバグレポートを提出しましたが、回答が得られず、まだ開いています。参照番号は14126397です。これはあなたが求めた「リンク」ですか?または、このレポートへのリンクを取得するにはどうすればよいですか? –