Frage

Ich bin Parsen eine JSON-Datei.

Nach dem NSDictionary bekommen, analysiere ich die Objekte im Wörterbuch in ein Array von Objekten. Doch für bestimmte JSON-Dateien, bekomme ich NULL, was in Ordnung sein sollte, aber es stürzt meine app für diejenigen Ort, wo ich erwarte etwas, aber immer 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;
}
War es hilfreich?

Lösung

Das grundlegende Problem scheint zu sein, dass es keine intValue Methode auf dem NSNull ist, dass Sie wieder aus dem Aufruf von ValueForKey bekommen.

Sie könnten die intValue Methode, fügen aber was würden Sie es für einen NSNull zurückkehren? 0? -1?

Der Code zu tun, das wäre in etwa so aussehen.

In MyNullExtensions.h:

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

Und in MyNullExtensions.m:

#import "MyNullExtensions.h"

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

Später, Blake.

Andere Tipps

Ein int kann nicht nil werden, so intValue hat keine Möglichkeit, Ihnen zu sagen, es nicht die intValue eines nil Objekt bekommen. Sie müssen prüfen, ob Sie von valueForKey: zurück ein Objekt bekam, bevor Sie für seine intValue fragen.

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

Sie einfach einen einfachen Test gegen NSNull, bevor Sie intValue nennen. Keine Notwendigkeit zu erweitern NSNull Objekt.

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

    // put your code here

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top