作者热门文章
- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我必须存档一个值为 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];
归档工作,但 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 提交错误报告。
解决方法是使用 encodeDouble
和 decodeDoubleForKey
- 您可以将值保持为 float
并且 C 规则不需要强制转换。
关于ios - float INFINITY 可以被 NSCoder 归档,但不能被 dearchived,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059941/
我必须存档一个值为 INFINITY 的 float,然后再将其取消存档。 这是我的示例代码: 要归档的对象: @interface CodeInf : NSObject @end @impleme
我是一名优秀的程序员,十分优秀!