float INFINITY pode ser arquivado pelo NSCoder, mas não é
Eu tenho que arquivar umfloat
com valorINFINITY
, e depois para o dodgeive.
Aqui está o meu código de exemplo:
Objeto a ser arquivado:
@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
E aqui está o código de arquivamento / dearchiving:
CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
O arquivamento funciona, mas o dearchiving aumenta o erro:
* Encerrando o aplicativo devido à exceção não-detectada 'NSRangeException', razão: '* - [NSKeyedUnarchiver decodeFloatForKey:]: value (inf) para a chave (INFINITY) muito grande para caber em float de 32 bits
Isso é um bug no dearchiver, ou algo de errado?