浮点INFINITY可以归档NSCoder,但不是dearchived

我必须将值为INFINITYfloat归档,然后将其归档。
这是我的示例代码:

要归档的对象:

 @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 

这里是归档/解码代码:

 CodeInf *myCodeInf = [[CodeInf alloc] init]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf]; myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

归档工作,但解体提出了错误:

*由于未捕获exception'NSRangeException',原因:'* – [NSKeyedUnarchiver decodeFloatForKey:]:value(inf)for key(INFINITY)太大而无法放入32位float'

这是dearchiver中的错误,还是我有错?

看起来像一个错误。 向苹果提交错误报告。

解决方法是使用encodeDoubledecodeDoubleForKey – 您可以将值保留为float ,C规则不需要强制转换。