noobie question ..检查NSArray或NSMutableArray的索引是否存在的最佳方法是什么。我到处搜索都无济于事!!
这就是我的尝试:
if (sections = [arr objectAtIndex:4])
{
/*.....*/
}
或
sections = [arr objectAtIndex:4]
if (sections == nil)
{
/*.....*/
}
但两者都抛出“越界”错误,不允许我继续
(不要用try catch回复因为那不是我的解决方案)
提前致谢
答案 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
超出限制且array
为nil
,然后编译器会抛出{{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;