Impedir a NSRangeException em Subarraywithrange
-
27-09-2019 - |
Pergunta
Eu tenho esse código que me permite passar em um índice e recuperar seletivamente, várias imagens em uma matriz para um determinado comprimento de intervalo - dependendo da orientação.
Quando no retrato, o intervalo deve ser de 20 itens por índice, e eu tenho 43 itens completamente. No entanto, quando passo no último índice, recebo uma exceção fora do alcance para o índice 59 além dos limites de [0..42].
NSArray *tempArray = [self imageData];
UIDeviceOrientation devOr = [[UIDevice currentDevice] orientation];
int kItemsPerView;
if (UIDeviceOrientationIsPortrait(devOr)) {
kItemsPerView = 20;
}else {
kItemsPerView = 14;
}
NSRange rangeForView = NSMakeRange( index * kItemsPerView, kItemsPerView );
NSArray *subArray = [[tempArray subarrayWithRange:rangeForView] retain];
NSMutableArray *imagesForView = [NSMutableArray arrayWithArray:subArray];
[subArray release];
return imagesForView;
Como posso evitar isso?
Obrigado.
Solução
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count)
rangeForView = NSMakeRange( index * kItemsPerView, tempArray.count-index*kItemsPerView );
Outras dicas
Abordagem alternativa, basta usar MIN()
função para determinar o final do intervalo.
Exemplo:
NSRange range;
range.location = index * kItemsPerView;
range.length = MIN(kItemsPerView, tempArray.count - range.location);
NSArray *imagesForView = [tempArray subarrayWithRange:range];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow