2013-06-12 11 views
10

float değerini INFINITY ile arşivlemek ve daha sonra araştırmak için.float INFINITY, NSCoder tarafından arşivlenebilir, ancak arandığında değil

Nesne arşivlenecek:
İşte benim örnek kod

@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 

Ve burada arşivleme/dearchiving kodudur:

CodeInf *myCodeInf = [[CodeInf alloc] init]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf]; 
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

Arşivleme çalışır, ancak dearchiving hata yükseltir:

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

Bu, hata veren bir hata mıdır? ya da yanlış bir şey mi yaparım?

cevap

4

Hata gibi görünüyor. Apple'a bir hata raporu gönderin. Bir geçici çözüm olarak, encodeDouble ve decodeDoubleForKey kullanın - değerinizi float olarak saklayabilir ve C kurallarına göre herhangi bir döküm gerekmez.

+0

Teşekkürler CRD, bir hata raporu gönderirim ve geçici çözümünüz iyidir! –

+0

Hey, @ ReinhardMänner bir hata raporu gönderdiniz mi ve bağlantı nedir? Sadece kodlama/kod çözme yüzdesi değeriyle iOS 8.3'de benzer bir çöküşle karşılaştık. Teşekkürler! – Danik

+0

@Danik: 12 Haziran 2013'te bir hata raporu gönderdim, ancak hiçbir zaman bir cevap almadım ve hala açık. Referans numarası 14126397'dir. Bu sizin için istediğin "link" dir mi? Ya da bu rapora nasıl bağlantı kurabilirim? –

İlgili konular