Devo archiviare un float
con il valore INFINITY
e successivamente per cercarlo.
Ecco il mio codice di esempio:float INFINITY può essere archiviato da NSCoder, ma non dearchived
oggetto da archiviare:
@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
Ed ecco l'archiviazione/code estratto dall'archivio:
CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
archiviazione funziona, ma dearchiviazione genera l'errore:
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSKeyedUnarchiver decodeFloatForKey:]: value (inf) for key (INFINITY) too large to fit in 32-bit float'
Si tratta di un errore nel dearchiver, o faccio qualcosa di sbagliato?
Grazie CRD, invierò una segnalazione di bug e la soluzione è buona! –
Ehi, @ ReinhardMänner hai inviato una segnalazione di bug e qual è il link? Abbiamo appena affrontato un crash simile su iOS 8.3 con valore float di codifica/decodifica. Grazie! – Danik
@Danik: Ho presentato una segnalazione di bug il 12 giugno 2013, ma non ho mai ricevuto una risposta ed è ancora aperta. Il numero di riferimento è 14126397. È questo il "link" che hai richiesto? O come posso ottenere un link a questo rapporto? –