2010-11-23 5 views
2

J'ai ce code qui me permet de passer dans un index, et de récupérer sélectivement, un certain nombre d'images dans un tableau pour une certaine longueur de gamme - en fonction de l'orientation. Lorsque vous êtes en portrait, la plage doit être de 20 éléments par index, et je dispose de 43 éléments au total. Cependant, quand je passe dans le dernier index, j'obtiens une exception hors plage pour l'index 59 au-delà des limites de [0..42].Prévenir NSRangeException dans subarrayWithRange

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; 

Comment puis-je empêcher cela?

Merci.

Répondre

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

Autre approche, il suffit d'utiliser la fonction MIN() pour déterminer la fin de la plage.

Exemple:

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