2010-11-23 3 views
2

У меня есть этот код, который позволяет мне передавать в индекс и выборочно извлекать несколько изображений в массиве для определенной длины диапазона - в зависимости от ориентации.Предотвращение исключения NSRangeException в subarrayWithRange

Если в портрете диапазон должен быть 20 пунктов на индекс, и у меня есть 43 элемента в целом. Однако, когда я передаю последний индекс, я получаю исключение вне диапазона для индекса 59 за пределами [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; 

Как я могу предотвратить это?

Спасибо.

ответ

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];