Question

J'analyse un fichier JSON.

Après avoir obtenu le NSDictionary, j’analyse les objets du dictionnaire dans un tableau d’objets. Cependant, pour certains fichiers JSON, je reçois la valeur NULL, ce qui devrait bien se passer, mais mon application est bloquée pour les endroits où je m'attends à quelque chose mais qui deviennent nuls.

- (id)initWithDictionary:(NSDictionary *)boxDictionary {
 if ([self init]) {
  // ... 
  int numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
  int numberOfItemsInBoxes = [[boxDictionary valueForKey:@"box_items_count"] intValue];
        // ..
 }
 return self;
}
Était-ce utile?

La solution

Le problème de base semble être qu'il n'y a pas de méthode intValue sur le NSNull que vous récupérez de l'appel de valueForKey:.

Vous pouvez ajouter la méthode intValue, mais que voudriez-vous qu'elle renvoie pour un NSNull? 0? -1?

Le code à faire qui ressemble à ceci.

Dans MyNullExtensions.h:

@interface NSNull (integer)
-(int) intValue;
@end

Et dans MyNullExtensions.m:

#import "MyNullExtensions.h"

@implementation NSNull (functional)
-(int) intValue
{
    return -1;
}
@end

Plus tard, Blake.

Autres conseils

Un int ne peut pas être nil . Par conséquent, intValue n'a aucun moyen de vous informer qu'il ne peut pas obtenir le . intValue d'un objet nil . Vous devez vérifier si un objet a été renvoyé de valueForKey: avant de demander son intValue .

if ([boxDictionary valueForKey:@"box_count"])
    numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];

Faites un simple test contre NSNull avant d'appeler intValue. Pas besoin d'étendre l'objet NSNull.

if ([rate valueForKey:@"value"]!=[NSNull alloc]) {

    // put your code here

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top