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

¿Fue útil?

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....."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top