2010-12-11 13 views
12

Tengo problemas para crear NSDictionaries en un bucle y agregarlo a un NSMutableArray.EXC_BAD_ACCESS al intentar crear un nuevo NSDictionary

Básicamente sólo quiero cambiar los nombres de las teclas, pero ya que no pude encontrar una función para la que fui a siguiente código:

- (NSMutableArray *)getCategoriesForChannel:(int)channelId { 
    NSDictionary *data = [self call:@"get_categories.ashx"]; 
    NSArray *categories = [data objectForKey:@"categories"]; 
    NSMutableArray *returnArray = [NSMutableArray 
          arrayWithCapacity:[categories count]]; 

    for(NSDictionary *category in categories) { 
     [returnArray addObject:[NSDictionary dictionaryWithObjectsAndKeys: 
         [category objectForKey:@"Channel_id"], @"id", 
         [category objectForKey:@"Channel_name"], "@name", nil]]; 
    } 
    return returnArray; 
} 

Pero aplicación siempre se cierra cuando se alcanza el método addObject: y arroja un EXC_BAD_ACCESS. Creo que tiene algo que ver con la administración de memoria, pero como no tengo un C-background no tengo idea de cómo resolver este problema. ¿Puede alguien indicarme la dirección correcta? ¡Gracias de antemano!

Respuesta

28
[returnArray addObject: 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [category objectForKey:@"Channel_id"], @"id", 
    [category objectForKey:@"Channel_name"], "@name", nil]]; 

Si este es, de hecho, el código que tiene (y la errata no se introdujo al escribir en el navegador web), observe que la última tecla que tiene es "@name" en lugar de @"name". Eso sería efectivamente un C-string, en lugar de un NSString, que no se puede agregar correctamente en un NSArray (o la mayoría de las clases de colección, para el caso).

+1

Gracias señor, ¡ese fue, de hecho, el problema! –

+1

¡A veces otro conjunto de ojos es todo lo que necesitas! Esto me salvó lo que estoy seguro hubiera sido horas de frustración. Gracias. – MikeCocoa

+3

Arg, acaba de cometer el mismo error ;-(increíble no hay advertencia de compilación .... –

2

Dentro del ciclo puede NSLog this [category objectForKey: @ "Channel_id"] y [category objectForKey: @ "Channel_name"]? Sospecho que uno está dando cero y causando el problema. No es seguro. Solo una suposición.

Cuestiones relacionadas