Domanda

Sto analizzando un file JSON.

Dopo aver ottenuto NSDictionary, analizzo gli oggetti nel dizionario in una matrice di oggetti. Tuttavia, per alcuni file JSON, ottengo NULL, che dovrebbe andare bene, ma si blocca la mia app per quei luoghi in cui mi aspetto qualcosa ma diventando null:

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

Soluzione

Il problema di base sembra essere che non esiste alcun metodo intValue su NSNull che torni dalla chiamata a valueForKey :.

Potresti aggiungere il metodo intValue, ma cosa vorresti che restituisse per un NSNull? 0? -1?

Il codice da fare sarebbe simile a questo.

In MyNullExtensions.h:

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

E in MyNullExtensions.m:

#import "MyNullExtensions.h"

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

In seguito, Blake.

Altri suggerimenti

Un int non può essere zero , quindi intValue non ha alcun modo di dirti che non è possibile ottenere il intValue di un oggetto nil . Devi verificare se hai ricevuto un oggetto restituito da valueForKey: prima di chiedere il suo intValue .

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

Fai un semplice test contro NSNull prima di chiamare intValue. Non è necessario estendere l'oggetto NSNull.

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

    // put your code here

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top