Error de selector no reconocido con NSJSONSerialization + AFNetworking

Actualización: Acabo de probar mi formatting JSON devuelto desde el server con JSONlint y está bien.

Recibo una exception con NSJSONSerialization en una llamada AFNetworking a un script php que devuelve datos JSON. He mirado las otras preguntas aquí con el mismo problema y he probado esas soluciones, pero aún estoy recibiendo el error.

Se cuelga en esta línea:

NSError *e = nil; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; 

Registro de errores:

2012-03-19 18: 10: 41.291 imageUploader [3538: 207] * Terminación de la aplicación debido a la exception no detectada 'NSInvalidArgumentException', motivo: '- [__ NSCFArray bytes]: selector no reconocido enviado a la instancia 0x6867430'

Mis datos JSON, cuando llamo al script php a través del browser, se ve así:

[{"usuario": "binky", "ruta": "binky-0a96f9aab5267c8.jpg", "índice": "101"}, {"usuario": "binky", "ruta": "binky-9cf844252c28553.jpg "," índice ":" 102 "}, {" usuario ":" binky "," ruta ":" binky-d6c749d25d33015.jpg "," índice ":" 103 "}]

El NSLog de los datos se ve así:

({index = 101; path = "binky-0a96f9aab5267c8.jpg"; user = binky;}, {index = 102; path = "binky-9cf844252c28553.jpg"; user = binky;}, {index = 103; path = "binky-d6c749d25d33015.jpg"; user = binky;})

Finalmente, hago una testing para asegurarme de tener datos JSON válidos:

  if ([NSJSONSerialization isValidJSONObject: jsonData]){ NSLog(@"Good JSON \n"); } 

Entonces no puedo entender dónde está la fuente de mi error. ¿Un poco de ayuda?

// operación AFNetworking + bloque

  AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:myRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id jsonData) { NSLog(@"Success JSON data:\n %@ \n", jsonData); //log data if ([NSJSONSerialization isValidJSONObject: jsonData]){ NSLog(@"Good JSON \n"); } NSError *e = nil; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; if (!jsonArray) { NSLog(@"Error parsing JSON: %@", e); } else { for(NSDictionary *item in jsonArray) { NSLog(@"Item: %@", item); } } [self.navigationController popToRootViewControllerAnimated:YES]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Error: %@", error); [self.navigationController popToRootViewControllerAnimated:YES]; }]; 

Aparentemente, JSONObjectWithData espera NSData en lugar de una matriz. id jsonData parece ser una matriz que representa el contenido de su cadena json. Aparentemente, estás esperando un Array de todos modos.

Por alguna razón, lo estás haciendo dos veces. En lugar de

  NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; 

puedes simplemente usar

 NSMutableArray *jsonArray = [NSMutableArray arrayWithArray:jsonData]; 

o, si no tiene que ser mutable:

 NSArray *jsonArray = (NSArray *) jsonData; 

Sin embargo, siempre debe probar si realmente es una matriz en jsonData. Dependiendo de la estructura dentro de la cadena json, podría ser un NSDictionary o nil en caso de errores.