Prevenir NSRangeException en subarrayWithRange
-
27-09-2019 - |
Pregunta
Tengo este código que me permite pase en un índice, y selectivamente recuperar un número de imágenes en una matriz para una cierta longitud gama -. Dependiendo de la orientación
Cuando en el retrato de la gama debe ser sea de 20 objetos por índice, y tengo 43 artículos por completo. Sin embargo, cuando i pase en el último índice, consigo un fuera de excepción gama para el índice 59 más allá de límites 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;
¿Cómo puedo evitar esto?
Gracias.
Solución
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count)
rangeForView = NSMakeRange( index * kItemsPerView, tempArray.count-index*kItemsPerView );
Otros consejos
enfoque alternativo, sólo tiene que utilizar la función MIN()
para determinar el final de la gama.
Ejemplo:
NSRange range;
range.location = index * kItemsPerView;
range.length = MIN(kItemsPerView, tempArray.count - range.location);
NSArray *imagesForView = [tempArray subarrayWithRange:range];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow