NSRangeException avec NSCoder

Nebuchad34Nebuchad34 Membre
18:04 modifié dans API AppKit #1
Bonjour,

Je rencontre un problème bizarre.
Dans une de mes classes qui sont conformes au NSCoding Protocol, j'encode et je décode des float en faisant :

- (void)encodeWithCoder:(NSCoder *)coder {<br />	<br />	[coder encodeFloat:percentage forKey:@&quot;percentage&quot;];<br />	[coder encodeFloat:winning forKey:@&quot;winning&quot;];<br />	[coder encodeBool:updateWithPercentage forKey:@&quot;updateWithPercentage&quot;];<br />}<br /><br />- (id)initWithCoder:(NSCoder *)coder {<br />	<br />	percentage = [coder decodeFloatForKey:@&quot;percentage&quot;];<br />	winning = [coder decodeFloatForKey:@&quot;winning&quot;];<br />	updateWithPercentage = [coder decodeBoolForKey:@&quot;updateWithPercentage&quot;];<br />	return self;<br />}<br /><br />


Sur certains fichiers, j'ai une NSException de levée à  l'ouverture lorsque l'on essaie de faire un initWithCoder de ce type d'objet. (mais ça ne le fait pas sur tous documents qui contiennent ses objets bizarrement !)

Dans la doc, il est noté que NSCoder lève une exceptuon sur "decodeFloatForKey", lorsque la valeur décodée ne rentre pas dans un float !

Comment peut il sortir autre chose qu'un float alors que j'ai encodé un float ??

De plus, si je fait :

percentage = (float)[coder decodeDoubleForKey:@percentage];
winning = (float)[coder decodeDoubleForKey:@winning];

au lieu d'utiliser decodeFloatForKey, eh bien ça marche parfaitement. Plus d'exceptions, et ce sont les bonnes valeurs qui sont chargées. What the Fuck ???  ???

Réponses

  • CéroceCéroce Membre, Modérateur
    18:04 modifié #2
    Peut-être tes anciens fichiers étaient-ils encodés avec le type double pour ces clefs ?
    Si c'est un .plist, tu n'as qu'à  l'ouvrir pour vérifier.
  • Nebuchad34Nebuchad34 Membre
    18:04 modifié #3
    hum,
    pas bête,
    en uvrant le fichier vec Property List editor, j'ai pu retrouver les valeurs qui posent problèmes. Elles sont bien indiquées comem des Number, mais leur valeur est à  "inf"
Connectez-vous ou Inscrivez-vous pour répondre.