菜鸟问题..检查 NSArray 或 NSMutableArray 的索引是否存在的最佳方法是什么。我到处找都没有结果!!

这是我尝试过的:

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

或者

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

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

(不要用 try catch 回复,因为这对我来说不是解决方案)

提前致谢

有帮助吗?

解决方案

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

其他提示

如果您有一个整数索引(例如,i),通常可以通过检查如此

的界限来防止此错误
int indexForObjectInArray = 4;
NSArray yourArray = ...

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

请记住 NSArray 位于 顺序0到N-1 项目

你正在尝试 access item 其中有 超出限制 和一个 arraynil 那么编译器会抛出 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