我必须归档float
值INFINITY
,然后归档它。
这是我的示例代码:
要归档的对象:
@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];
归档有效,但是归档会引发错误:
*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSKeyedUnarchiver decodeFloatForKey:]:value(inf) 键(INFINITY)太大而不适合32位浮点数
这是dearchiver中的一个错误,还是我做错了什么?
答案 0 :(得分:4)
看起来像个错误。向Apple提交错误报告。
使用encodeDouble
和decodeDoubleForKey
作为解决方法 - 您可以将您的值保持为float
,并且C规则不需要强制转换。