2010-06-25 4 views
0

Je suis gettin l'erreur de followig après la conversion JSON écho dans un dictionnaire,Erreur dans JSON ou d'écrire le dictionnaire

* Mettre fin application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: « * - [NSMutableArray insertObject: atIndex:]: tentative d'insertion d'un objet nul à 0 ' *** Pile d'appel au premier lancement:

Voici mon code de désérialisation JSON, j'ai déjà utilisé ce modèle pour un simple plist. Maintenant, j'envoie un écho plus compliqué (avec des objets et des touches) et ça plante.

NSURL *url = [NSURL URLWithString:@"http://10.0.1.8/~imac/iphone/jsontest.php"]; 
    NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url]; 

    NSLog(jsonreturn); // Look at the console and you can see what the results are 

    NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding]; 
    NSError *error = nil; 

    NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error]; 

    if (dict) 
    { 
     rowsArray = [dict objectForKey:@"member"]; 
     [rowsArray retain]; 
    } 


    NSLog(@"Array: %@",rowsArray); 
    NSLog(@"count is: %i", [self.rowsArray count]); 


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *choiceR = [documentsDirectory stringByAppendingPathComponent:@"FollowingArray"]; 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 

    [array addObject:rowsArray]; 
    [array writeToFile:choiceR atomically:YES]; 
    [array release]; 

    [jsonreturn release]; 

Voici un extrait de l'écho:

{"member":[ 
{"userid":"18", 
"firstname":"Frank", 
"lastname":"Johnson", 
"profile":{"school":"7","grade":"12","teacher"} 
}, 
{"userid":"38", 
"firstname":"maggy", 
"lastname":"Johnson", 
"profile":{"school":"7","grade":"12","teacher"} 
}]} 

Je suppose que je reçois un accident parce que le tableau est vide. Toutes les idées si l'écho est à l'origine du plantage ou une instruction dans JSON pour gérer ce type de retour de clé et d'objet.

Merci, Michael

Répondre

0

Vous passez un NSDictonary à rowsArray que vos données JSON semble être un dictionnaire imbriqué dans un dictionnaire. Je suppose donc que rowsArray est vide et provoque le plantage lorsque vous essayez de l'ajouter à votre fichier muable.

+0

J'ai déjà utilisé ceci, est-ce que cette instruction est incorrecte pour un tableau imbriqué? rowsArray = [dict objetForKey: @ "membre"]; –

+0

Les données JSON ressemblent à un dictionnaire imbriqué. "Membre" le premier niveau et l'autre niveau ressemble à des valeurs-clés à savoir: "user id", "18" etc. Donc ce serait NSDictionary * rowsDict = [dict objectForKey: @ "member"]; Le plus simple serait de se débarrasser du niveau «membre» en l'éditant manuellement hors de vos données et vous travaillez avec juste un dictionnaire. –