NSArray fuera de límites de verificación
-
16-12-2019 - |
Pregunta
pregunta de novato..¿Cuál es la mejor manera de comprobar si existe el índice de un NSArray o NSMutableArray?¡¡Busco por todas partes sin resultado!!
Esto es lo que he probado:
if (sections = [arr objectAtIndex:4])
{
/*.....*/
}
o
sections = [arr objectAtIndex:4]
if (sections == nil)
{
/*.....*/
}
pero ambos arrojan un error "fuera de límites" que no me permite continuar
(no respondas con un try catch porque esa no es una solución para mí)
gracias de antemano
Solución
if (array.count > 4) {
sections = [array objectAtIndex:4];
}
Otros consejos
Si tiene un índice entero (p. ej. i
), generalmente puedes evitar este error comprobando los límites de las matrices como esta
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 elementos
Tu estas tratando de access
item
que tiene límite excedido y un array
es nil
entonces el compilador descartaría bound error
.
EDITAR :La respuesta anterior de @sch muestra cómo podemos verificar si NSArray ha requerido que el elemento pedido esté presente o no.
Puedes usar el MIN
El operador falla silenciosamente de esta manera. [array objectAtIndex:MIN(i, array.count-1)]
, para obtener el siguiente objeto de la matriz o el último.Puede resultar ú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:"Una serie aleatoria de cadenas....."