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 elobjectForKey:
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"];