Pergunta

noobie pergunta..Qual é a melhor maneira de verificar se o índice de um NSArray ou NSMutableArray existe.Eu procuro em todos os lugares sem sucesso!!

Isso é o que eu tentei:

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

ou

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

mas ambos lança um "fora dos limites de erro" não me permitir continuar

(não responda com um tenta pegar, porque isso não é uma solução para mim)

Obrigado antecipadamente

Foi útil?

Solução

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

Outras dicas

Se você tiver um índice inteiro (por exemplo, i), geralmente, você pode evitar este erro verificando matrizes limites como esta

int indexForObjectInArray = 4;
NSArray yourArray = ...

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

Tenha em mente NSArray em ordem seqüencial a partir de De 0 a N-1 itens

O seu está tentando access item que tem limite excedido e um array é nil em seguida, o compilador iria jogar fora de bound error.

EDITAR :@sch resposta acima mostra como podemos verificar se o NSArray foi necessário ordenar item presente ou não.

Você pode usar o MIN operador de falhar silenciosamente como este [array objectAtIndex:MIN(i, array.count-1)], para obter o próximo objeto na matriz ou o último.Pode ser útil quando, por exemplo, você deseja concatenar seqüências de caracteres:

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:"Alguns aleatória matriz de seqüências de caracteres ....."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top