سؤال

لدي هذا الرمز الذي يسمح لي بالمرور في فهرس ، واسترداد عدد من الصور بشكل انتقائي في صفيف لطول نطاق معين - اعتمادًا على الاتجاه.

عندما تكون في الصورة ، يجب أن يكون النطاق 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;

كيف يمكنني منع ذلك؟

شكرًا.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

نهج بديل ، فقط استخدم MIN() وظيفة لتحديد نهاية النطاق.

مثال:

NSRange range;
range.location = index * kItemsPerView;
range.length = MIN(kItemsPerView, tempArray.count - range.location);
NSArray *imagesForView = [tempArray subarrayWithRange:range];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top