2011-04-29 26 views
5

Esto debe ser bastante básico, pero me preguntaba cómo agregar un entero a una matriz?¿Cómo agregar un número entero a una matriz?

Sé que puedo agregar cadenas como esto:

NSMutableArray *trArray = [[NSMutableArray alloc] init]; 
[trArray addObject:@"0"]; 
[trArray addObject:@"1"]; 
[trArray addObject:@"2"]; 
[trArray addObject:@"3"]; 

pero supongo que no puedo simplemente sumar enteros, así:

NSMutableArray *trArray = [[NSMutableArray alloc] init]; 
[trArray addObject:0]; 
[trArray addObject:1]; 
[trArray addObject:2]; 
[trArray addObject:3]; 

Al menos el compilador no es feliz con eso y me dice que estoy haciendo un yeso sin haberlo dicho.

Cualquier explicación sería muy apreciada.

Respuesta

27

Sí, eso es correcto. El compilador no aceptará tu código así. La diferencia es la siguiente:

Si escribe @"a String", es lo mismo que si creara una cadena y la liberara automáticamente. Entonces crea un objeto usando @"a String".

Pero una matriz solo puede almacenar objetos (más precisos: punteros al objeto). Entonces tienes que crear objetos que almacenan tu número entero.

NSNumber *anumber = [NSNumber numberWithInteger:4]; 
[yourArray addObject:anumber]; 

retrive el número entero de nuevo, hacerlo de esta manera

NSNumber anumber = [yourArray objectAtIndex:6]; 
int yourInteger = [anumber intValue]; 

espero que mi respuesta le ayuda a comprender por qué no funciona. No puedes convertir un entero a un puntero. Y esa es la advertencia que recibes de Xcode.

EDIT:

Ahora también es posible escribir la siguiente

[yourArray addObject:@3]; 

que es un acceso directo para crear un NSNumber. La misma sintaxis está disponible para las matrices

@[@1, @2]; 

le dará una NSArray que contiene 2 objetos NSNumber con los valores 1 y 2.

+0

Gracias, creo que entiendo esto ahora. Tu explicación es muy buena! –

+0

Gracias. La respuesta de mservidio es absolutamente correcta. Pero siempre me gusta tener una explicación. ;-) –

+0

Simplemente una pregunta de seguimiento: ¿el 'número' almacenado en mi matriz es un entero (int) o un NSInteger?¿O no es esto realmente importante? –

7

Tiene que usar NSNumbers, creo, intente agregar estos objetos a su matriz: [NSNumber numberWithInteger: myInt];

NSMutableArray *trArray = [[NSMutableArray alloc] init];  
NSNumber *yourNumber = [[NSNumber alloc] numberWithInt:5]; 

[trArray addObject: yourNumber]; 
+0

mservidio es correcto. Creo que la forma de pensar en esto es porque '@" 2 "' es un objeto 'NSString'. Sin embargo, '2' en sí mismo es un valor, no un objeto. – dredful

+1

para expandir, básicamente crea una instancia del objeto NSNumber que es una versión de objeto de la primitiva int o lo que sea y luego agrega este objeto a la matriz. Además, para recuperar el valor primitivo de la matriz, utilice [[myArray objectAtIndex: 0] intValue]; –

4

También puede usar esta opción si desea utilizar cadenas:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
[array addObject:[NSString stringWithFormat:@"%d",1]]; 
[[array objectAtIndex:0] intValue]; 
Cuestiones relacionadas