2012-03-15 43 views
15

câu hỏi noobie .. Cách tốt nhất để kiểm tra xem chỉ mục của NSArray hoặc NSMutableArray có tồn tại hay không. Tôi tìm kiếm ở khắp mọi nơi để không có kết quả !!NSArray ngoài giới hạn kiểm tra

Đây là những gì tôi đã cố gắng:

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

hoặc

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

nhưng cả hai ném một lỗi "ngoài giới hạn" không cho phép tôi tiếp tục

(không trả lời với một thử bắt vì đó không phải là một giải pháp cho tôi)

Cảm ơn trước

Trả lời

14
if (array.count > 4) { 
    sections = [array objectAtIndex:4]; 
} 
+1

Chết tiệt .. im thật ngu ngốc .. tất nhiên !! một mảng được điền tuần tự. tôi đã làm cho đầu của tôi một mớ hỗn độn. Cảm ơn bạn đời +1 – spacebiker

+3

Tôi nghĩ ngôn ngữ khách quan là một chút ngu ngốc ở đây. Tôi sẽ thoải mái hơn nếu '[array objectAtIndex: outOfBounds]' trả về 'nil' thay vì bị lỗi. – turingtested

0

Hãy nhớ NSArray là trong tuần tự theo thứ tự từ 0 đến N-1 mục

bạn đang cố gắng để accessitem đã vượt quá giới hạnarraynil sau đó trình biên dịch sẽ ném ra khỏi bound error.

EDIT: câu trả lời của @ sch ở trên cho thấy làm cách nào chúng tôi có thể kiểm tra xem NSArray có yêu cầu mục có mặt trong đó hay không.

+0

Một mảng các mục N theo thứ tự từ 0 đến N-1 – tothemario

+0

@tothemario: bắt tuyệt vời. Cảm ơn –

2

Nếu bạn có một chỉ số nguyên (ví dụ i), bạn thường có thể ngăn chặn lỗi này bằng cách kiểm tra các mảng giới hạn như thế này

int indexForObjectInArray = 4; 
NSArray yourArray = ... 

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

Bạn có thể sử dụng toán tử MIN thất bại âm thầm như [array objectAtIndex:MIN(i, array.count-1)] này, hoặc là nhận đối tượng tiếp theo trong mảng hoặc đối tượng cuối cùng. Có thể hữu ích khi bạn ví dụ muốn nối chuỗi:

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

Kết quả: "Một số mảng ngẫu nhiên của chuỗi....."

Các vấn đề liên quan