سؤال

سؤال نوبي ..ما هي أفضل طريقة للتحقق من وجود فهرس NSArray أو NSMutableArray.أبحث في كل مكان دون جدوى!!

هذا ما حاولت:

if (sections = [arr objectAtIndex:4])
{
    /*.....*/
}

أو

sections = [arr objectAtIndex:4]
if (sections == nil)
{
    /*.....*/
}

لكن كلاهما يلقي خطأ "خارج الحدود" ولا يسمح لي بالمتابعة

(لا ترد بمحاولة الصيد لأن هذا ليس حلاً بالنسبة لي)

شكرا لك مقدما

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

المحلول

giveacodicetagpre.

نصائح أخرى

إذا كان لديك فهرس عدد صحيح (على سبيل المثال. i)، يمكنك بشكل عام منع هذا الخطأ عن طريق التحقق من حدود المصفوفات مثل هذا

int indexForObjectInArray = 4;
NSArray yourArray = ...

if (indexForObjectInArray < [yourArray count])
{
    id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray];
}

ضع في اعتبارك أن NSArray موجود ترتيب تسلسلي من 0 إلى N-1 أغراض

الخاص بك تحاول أن access item الذي لديه تجاوزت الحد و أ array يكون nil ثم سوف يرمي المترجم من bound error.

يحرر :توضح إجابة @sch أعلاه كيف يمكننا التحقق مما إذا كان NSArray يتطلب وجود العنصر المطلوب فيه أم لا.

يمكنك استخدام ال MIN المشغل ليفشل بصمت مثل هذا [array objectAtIndex:MIN(i, array.count-1)], ، إما للحصول على الكائن التالي في المصفوفة أو الأخير.يمكن أن يكون مفيدًا عندما تريد على سبيل المثال ربط السلاسل:

NSArray *array = @[@"Some", @"random", @"array", @"of", @"strings", @"."];
NSString *concatenatedString = @"";
for (NSUInteger i=0; i<10; i++) {  //this would normally lead to crash
    NSString *nextString = [[array objectAtIndex:MIN(i, array.count-1)]stringByAppendingString:@" "];
    concatenatedString = [concatenatedString stringByAppendingString:nextString];
    }
NSLog(@"%@", concatenatedString);

نتيجة:"بعض المصفوفات العشوائية من السلاسل....."

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top