2010-11-23 32 views
2

我有這個代碼,它允許我傳入一個索引,並有選擇地檢索數組中的圖像的數量爲一定的範圍長度 - 取決於方向。防止在子數組中的NSRangeExceptionWithRange

縱向時,範圍應該是每個索引20個項目,並且我總共有43個項目。然而,當我通過最後一個索引時,我得到超出[0..42]範圍的索引59的超範圍異常。

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; 

我該如何預防?

謝謝。

回答

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

替代方法,只需使用MIN()函數來確定範圍的結束。

實施例:

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