2011-04-22 15 views
17

tengo esta situaciónIOS: NSMutableArray initWithCapacity

array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad 

if (index == 0){ 
    [array insertObject:object atIndex:0]; 
} 

if (index == 1){ 
    [array insertObject:object atIndex:1]; 
} 

if (index == 2){ 
    [array insertObject:object atIndex:2]; 
} 

if (index == 3){ 
    [array insertObject:object atIndex:3]; 
} 

pero si inserto el fin del objeto que es todo muy bien, en cambio si completo la matriz en este orden: 0 y después de 3, que no funcionan bien, ¿por qué?

+0

¿Está tratando de insertar el índice de objetos en 4? – saadnib

+0

no ..... Intento, por ejemplo, insertar el objeto en el índice 0 y después en el índice 2 pero no funciona – CrazyDev

Respuesta

49

No puede insertar el objeto en el índice 3 en NSMutableArray aunque su capacidad sea 4. La matriz mutable tiene tantas "celdas" disponibles como objetos hay en ella. Si desea tener "celdas vacías" en una matriz mutable, debe usar los objetos [NSNull null]. Es un stub-objects especial que significa no-data-here.

NSMutableArray *array = [[NSMutableArray alloc] init]; 

for (NSInteger i = 0; i < 4; ++i) 
{ 
    [array addObject:[NSNull null]]; 
} 

[array replaceObjectAtIndex:0 withObject:object]; 
[array replaceObjectAtIndex:3 withObject:object]; 
-3

No se puede insertar al principio, por ejemplo, en el índice 0, luego, en el índice 2, se debe insertar paso a paso insertar en 0,1,2,3,4,5 ....., n Qué desea hacer? Cual es tu problema ???

Puede intentar crear una matriz, luego iniciarla con cero elementos y luego insertarla !!! Creo que funcionará !!!

+0

si inserto en el objeto de orden no hay problema ... pero si deseo insertarlo un objeto primero en posición 0 y luego en posición 2 o 3 hay un problema, ¿de acuerdo? Ascender está bien pero al azar no ... ¿entiendes? – CrazyDev

10

En el estilo C int a[10] crea una matriz de tamaño 10 y se puede acceder a cualquier índice 0-9 en cualquier orden. Pero este no es el caso con initWithCapacity o arrayWithCapacity. Es solo una pista que el sistema subyacente puede usar para mejorar el rendimiento. Esto significa que no puede insertar fuera de servicio. Si tiene una matriz mutable de tamaño n, puede insertar solo desde el índice 0 a n, 0 a n-1 para las posiciones existentes y n para insertar en la posición final. Entonces 0, 1, 2, 3 es válido. Pero el orden 0, 3 o 1,2 no es válido.

0

No puede insertar en ningún índice al azar, si desea hacer esto, primero inicialice su matriz con objetos nulos y luego llame a replaceObjectAtIndex.