在subarrayWithRange中防止NSRangeException

时间:2010-11-23 10:57:38

标签: objective-c ios4 nsarray outofrangeexception nsrange

我有这个代码,它允许我传入索引,并有选择地检索数组中的一些图像一定范围长度 - 取决于方向。

在纵向时,范围应该是每个索引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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

替代方法,只需使用MIN()函数来确定范围的结束。

示例:

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