Prevenire NSRangeException in subarrayWithRange
-
27-09-2019 - |
Domanda
Ho questo codice che mi permette di passare in un indice, e selettivamente recuperare, una serie di immagini in una matrice di una certa lunghezza intervallo -. Seconda dell'orientamento
Quando nel ritratto gamma dovrebbe essere essere 20 elementi per indice, e ho 43 articoli complessivamente. Tuttavia quando passo in ultimo indice, ottengo un'eccezione di gamma per l'indice 59 oltre limiti [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;
Come posso evitare questo?
Grazie.
Soluzione
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count)
rangeForView = NSMakeRange( index * kItemsPerView, tempArray.count-index*kItemsPerView );
Altri suggerimenti
approccio alternativo, basta usare funzione MIN()
per determinare la fine dell'intervallo.
Esempio:
NSRange range;
range.location = index * kItemsPerView;
range.length = MIN(kItemsPerView, tempArray.count - range.location);
NSArray *imagesForView = [tempArray subarrayWithRange:range];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow