float INFINITY可以由NSCoder归档,但不能归档

Rei*_*ner 10 objective-c archiving ios

我必须归档一个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
Run Code Online (Sandbox Code Playgroud)

以下是归档/解密代码:

CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)

归档工作,但是归档会引发错误:

*由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [NSKeyedUnarchiver decodeFloatForKey:]:键(INFINITY)的值(inf)太大而不适合32位浮点数'

这是dearchiver中的一个错误,还是我做错了什么?

CRD*_*CRD 4

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

作为解决方法,使用encodeDoubleand decodeDoubleForKey- 您可以将值保留为 a float,并且 C 规则不需要强制转换。