NSArray de verificação de limites
-
16-12-2019 - |
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
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 ....."