gpt4 book ai didi

ios - float INFINITY 可以被 NSCoder 归档,但不能被 dearchived

转载 作者:技术小花猫 更新时间:2023-10-29 11:06:02 26 4
gpt4 key购买 nike

我必须存档一个值为 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];

归档工作,但 dearchiving 引发错误:

* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSKeyedUnarchiver decodeFloatForKey:]: value (inf) for key (INFINITY) too large to fit in 32-bit float'

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

最佳答案

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

解决方法是使用 encodeDoubledecodeDoubleForKey - 您可以将值保持为 float 并且 C 规则不需要强制转换。

关于ios - float INFINITY 可以被 NSCoder 归档,但不能被 dearchived,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com