浮点INFINITY可以归档NSCoder,但不是dearchived
我必须将值为INFINITY
的float
归档,然后将其归档。
这是我的示例代码:
要归档的对象:
@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中的错误,还是我有错?
看起来像一个错误。 向苹果提交错误报告。
解决方法是使用encodeDouble
和decodeDoubleForKey
– 您可以将值保留为float
,C规则不需要强制转换。