NSArray超出界限检查

时间:2012-03-15 07:04:40

标签: cocoa nsmutablearray nsarray indexoutofboundsexception

noobie question ..检查NSArray或NSMutableArray的索引是否存在的最佳方法是什么。我到处搜索都无济于事!!

这就是我的尝试:

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

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

但两者都抛出“越界”错误,不允许我继续

(不要用try catch回复因为那不是我的解决方案)

提前致谢

4 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:2)

如果你有一个整数索引(例如i),你通常可以通过检查这样的数组边界来防止这个错误

int indexForObjectInArray = 4;
NSArray yourArray = ...

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

答案 2 :(得分:0)

请记住,NSArray是从 0到N-1 项目中的连续顺序

您正在尝试access item 超出限制arraynil,然后编译器会抛出{{1} }}

编辑:@ sch上面的回答显示了我们如何检查NSArray是否需要其中存在的订购商品。

答案 3 :(得分:0)

您可以使用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);

结果:&#34;一些随机数组的字符串。 。 。 。 。 &#34;