2010-11-23 31 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];