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];
}