tellraw comando json cocoa-touch

json - comando - [__NSCFArray objectForKey:]: selector no reconocido enviado a la instancia



tellraw generator 1.12 1 (3)

El problema es que tienes un NSArray no un NSDictionary . El NSArray tiene un recuento de 1 y contiene un NSDictionary .

NSArray *wrapper= [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil]; NSDictionary *avatars = [wrapper objectAtIndex:0];

Para recorrer todos los elementos de la matriz, enumere la matriz.

NSArray *avatars= [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil]; for (NSDictionary *avatar in avatars) { NSDictionary *avatarimage = avatar[@"image"]; NSString *name = avatar[@"name"]; // THE REST OF YOUR CODE }

NOTA: también -objectForKey: de -objectForKey: a [] sintaxis. Me gusta más ese.

Estoy tratando de obtener un valor para una clave particular de un diccionario, pero obtengo un "[__NSCFArray objectForKey:]: selector no reconocido enviado a la instancia"

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSDictionary *avatars = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil]; NSLog(@"response:::%@", avatars); if(avatars){ NSDictionary *avatarimage = [avatars objectForKey:@"- image"]; NSString *name = [avatars objectForKey:@"name"]; } }

S NSLog my avatars Dictionary y mi resultado es:

( { "created_at" = "2013-06-06T11:37:48Z"; id = 7; image = { thumb = { url = "/uploads/avatar/image/7/thumb_304004-1920x1080.jpg"; }; url = "/uploads/avatar/image/7/304004-1920x1080.jpg"; }; name = Drogba; "updated_at" = "2013-06-06T11:37:48Z"; } )


La razón por la que ves eso es porque avatars no es un NSDictionary sino que es un NSArray .

Puedo decir porque:

  • la excepción que obtienes dice que __NSCFArray (es decir, NSArray ) no reconoce el objectForKey: selector
  • al iniciar avatars , imprime también paréntesis ( . Se registra una matriz de esta manera:

    (primer elemento, segundo elemento, ...)

mientras que un diccionario se registra de esta manera:

{ firstKey = value, secondKey = value, … }

Puedes arreglar esto de esta manera:

NSArray *avatars = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil]; NSLog(@"response:::%@", avatars); if(avatars){ NSDictionary *avatar = [avatars objectAtIndex:0]; // or avatars[0] NSDictionary *avatarimage = [avatar objectForKey:@"- image"]; NSString *name = [avatar objectForKey:@"name"]; }

También tenga en cuenta que la clave para avatarImage es incorrecta.


Prueba esto:

NSMutableDictionary *dct =[avatars objectAtIndex:0]; NSDictionary *avatarimage = [dct objectForKey:@"- image"]; NSString *name = [dct objectForKey:@"name"];