2012-03-15 11 views
15

pregunta noobie .. Cuál es la mejor manera de verificar si existe el índice de un NSArray o NSMutableArray. ¡Busco en todas partes sin éxito!NSArray fuera de límites ver

Esto es lo que he intentado:

if (sections = [arr objectAtIndex:4]) 
{ 
    /*.....*/ 
} 

o

sections = [arr objectAtIndex:4] 
if (sections == nil) 
{ 
    /*.....*/ 
} 

pero los dos tiros un "fuera de límites" error no permitirme continuar

(no responda con un try catch porque no es una solución para mí)

Gracias de antemano

Respuesta

14
if (array.count > 4) { 
    sections = [array objectAtIndex:4]; 
} 
+1

Damn .. im tan estúpida .. por supuesto !! una matriz se llena secuencialmente. hice mi cabeza un desastre. Gracias amigo +1 – spacebiker

+3

Creo que el lenguaje objetivo c es un poco estúpido aquí. Me sentiría más cómodo si '[array objectAtIndex: outOfBounds]' devolviese 'nil' en lugar de colgarse. – turingtested

0

Tenga en cuenta NSArray está en orden secuencial de 0 a N-1 artículos

Su están tratando de accessitem que ha superado el límite y una array es nil continuación compilador tirar fuera de bound error.

EDIT: @ sch la respuesta anterior muestra cómo podemos verificar si NSArray ha requerido el artículo ordenado presente en él o no.

+0

Una serie de N elementos está en orden secuencial de 0 a N-1 – tothemario

+0

@tothemario: catch maravilloso. Gracias –

2

Si usted tiene un índice de enteros (por ejemplo i), por lo general, puede evitar este error mediante la comprobación de los límites arreglos como

int indexForObjectInArray = 4; 
NSArray yourArray = ... 

if (indexForObjectInArray < [yourArray count]) 
{ 
    id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray]; 
} 
0

Usted puede utilizar el operador MIN a fallar en silencio como éste [array objectAtIndex:MIN(i, array.count-1)], ya sea obtener el siguiente objeto en la matriz o el último. Puede ser útil cuando, por ejemplo, desea concatenar cadenas:

NSArray *array = @[@"Some", @"random", @"array", @"of", @"strings", @"."]; 
NSString *concatenatedString = @""; 
for (NSUInteger i=0; i<10; i++) { //this would normally lead to crash 
    NSString *nextString = [[array objectAtIndex:MIN(i, array.count-1)]stringByAppendingString:@" "]; 
    concatenatedString = [concatenatedString stringByAppendingString:nextString]; 
    } 
NSLog(@"%@", concatenatedString); 

Resultado: "Algunos disposición aleatoria de cadenas....."

Cuestiones relacionadas