cocoa nsmutablearray nsarray indexoutofboundsexception

cocoa - NSArray chequeo fuera de límites



nsmutablearray indexoutofboundsexception (4)

Puede usar el operador MIN para fallar silenciosamente de esta manera [array objectAtIndex:MIN(i, array.count-1)] , para 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 arreglos aleatorios de cadenas ...".

Pregunta de noobie. ¿Cuál es la mejor manera de verificar si existe el índice de un NSArray o NSMutableArray? ¡Busco por todas partes sin éxito!

Esto es lo que he intentado:

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

o

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

pero ambos lanzan un error "fuera de límites" que no me permite continuar

(No respondas con un retén de prueba porque no es una solución para mí)

Gracias por adelantado


Si tiene un índice de enteros (por ejemplo, i ), generalmente puede evitar este error al verificar los límites de las matrices de esta manera

int indexForObjectInArray = 4; NSArray yourArray = ... if (indexForObjectInArray < [yourArray count]) { id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray]; }


Tenga en cuenta que NSArray está en orden secuencial de 0 a N-1 .

Está intentando access item que ha excedido el límite y una array es nil luego el compilador arrojaría un bound error fuera de bound error .

EDITAR : la respuesta de @ sch anterior muestra cómo podemos verificar si NSArray ha requerido que el artículo ordenado esté presente o no.


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