float
을 값 INFINITY
으로 아카이브하고 나중에 아카이브해야합니다.float INFINITY는 NSCoder에 의해 아카이브 될 수 있지만 아카이브되지 않을 수 있습니다.
객체 보관하기 :
여기 내 예제 코드입니다
@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
그리고 여기에 보관/tar를 풀면 코드 :
CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
보관 작동은하지만, tar를 풀면는 오류가 발생합니다 :
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSKeyedUnarchiver decodeFloatForKey:]: value (inf) for key (INFINITY) too large to fit in 32-bit float'
dearchiver의 버그입니까? 아니면 내가 뭔가 잘못 됐니?
감사합니다. CRD, 버그 신고서를 제출하고 회피 할 수 있습니다. –
안녕하세요, ReinhardMänner가 버그 신고서를 제출하셨습니까? 링크는 무엇입니까? 우리는 iOS 8.3에서 float 값을 인코딩/디코딩하는 것과 비슷한 충돌이 발생했습니다. 감사! – Danik
@ 다닉 : 2013 년 6 월 12 일에 버그 신고서를 제출했지만 답을 얻지 못했지만 아직 공개되었습니다. 참조 번호는 14126397입니다. 요청한 '링크'입니까? 또는이 보고서에 대한 링크를 얻으려면 어떻게합니까? –