2012-03-15 72 views
15

noobie问题..什么是检查NSArray或NSMutableArray的索引是否存在的最佳方法是什么?我到处搜索无济于事!NSArray越界检查

这是我曾尝试:

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

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

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

(不回复尝试赶上,因为那不是一个解决方案对我来说)

在此先感谢

回答

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

妈..即时通讯这么愚蠢。当然的!数组按顺序填充。我把我的头弄得一团糟。谢谢队友+1 – spacebiker 2012-03-15 07:19:39

+3

我认为objective-c语言在这里有点愚蠢。如果'[array objectAtIndex:outOfBounds]'返回'nil'而不是崩溃,我会更加舒服。 – turingtested 2016-05-24 10:20:04

0

记住的NSArray是顺序0到N-1项目

你正在努力accessitem超出限制arraynil那么编译器会扔出bound error

编辑:@ sch上面的答案显示了我们如何检查NSArray是否需要存在或不存在有序物品。

+0

N件物品的排列顺序从0到N-1 – tothemario 2015-03-24 21:27:07

+0

@tothemario:美妙的捕捉。谢谢 – 2015-03-25 07:11:55

2

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

int indexForObjectInArray = 4; 
NSArray yourArray = ... 

if (indexForObjectInArray < [yourArray count]) 
{ 
    id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray]; 
} 
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); 

结果:“字符串的一些随机排列。。。”