2010-11-23 7 views
2

Ich habe diesen Code, der es mir erlaubt, eine Reihe von Bildern in einem Array für eine bestimmte Bereichslänge in einem Index übergeben und selektiv abrufen - je nach Ausrichtung.Verhindern NSRangeException in SubarrayWithRange

Wenn im Hochformat sollte der Bereich 20 Elemente pro Index sein, und ich habe insgesamt 43 Elemente. Wenn ich jedoch den letzten Index übergebe, erhalte ich eine Ausnahme außerhalb des Bereichs für den Index 59 jenseits der Grenzen von [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; 

Wie kann ich das verhindern?

Danke.

Antwort

2
if ((index * kItemsPerView + kItemsPerView) >= tempArray.count) 
    rangeForView = NSMakeRange(index * kItemsPerView, tempArray.count-index*kItemsPerView); 
1

Alternativer Ansatz, verwenden Sie einfach MIN() Funktion für die Bestimmung des Endes des Bereichs.

Beispiel:

NSRange range; 
range.location = index * kItemsPerView; 
range.length = MIN(kItemsPerView, tempArray.count - range.location); 
NSArray *imagesForView = [tempArray subarrayWithRange:range]; 
Verwandte Themen