Obtenga un valor integer de NSNumber en NSArray

Así que tengo un NSArray con NSNum objects que tienen valores int

arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease]; [arrayOfValues retain]; 

Estoy intentando iterar a través de la matriz de este modo

 int currentValue; for (int i = 0; i < [arrayOfValues count]; i++) { currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue]; NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS } 

¿Qué estoy haciendo mal aquí?

Está utilizando el especificador de formatting incorrecto. % @ es para objects, pero int no es un object. Entonces, deberías estar haciendo esto:

 int currentValue; for (int i = 0; i < [arrayOfValues count]; i++) { currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue]; NSLog(@"currentValue: %d", currentValue); // EXE_BAD_ACCESS } 

Más información en los documentos .

Esto funcionó para mí al crear un NSArray de valores de enumé que quería llamar (lo cual es útil para saber que esta es la solución adecuada para eso). Estoy usando Xcode 6.4.

 int currentValue = (int)[(NSNumber *)[arrayOfValues objectAtIndex:i] integerValue]; 

La respuesta de sosborn arrojará una advertencia, ya que todavía es necesario lanzar el NSInteger a un int.

Typecasting en ObjC es la ruina de mi existencia. ¡Espero que esto ayude a alguien!