我必须存档一个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”而终止应用程序,原因:“*-[NSKeyedUnarchiverdecodeFloatForKey:]:值(inf)
键 (INFINITY) 太大,无法容纳 32 位浮点'
这是 dearchiver 中的错误,还是我做错了什么?
看起来像一个错误。向 Apple 提交错误报告。
作为解决方法使用encodeDouble
and decodeDoubleForKey
- 你可以保持你作为一个人的价值float
C 规则不需要强制转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)