【问题标题】:NSArray out of bounds checkNSArray 越界检查
【发布时间】:2012-03-31 16:43:59
【问题描述】:

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

这是我尝试过的:

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

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

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

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

提前致谢

【问题讨论】:

    标签: cocoa nsmutablearray nsarray indexoutofboundsexception


    【解决方案1】:
    if (array.count > 4) {
        sections = [array objectAtIndex:4];
    }
    

    【讨论】:

    • 该死..我太傻了..当然!!数组按顺序填充。我把脑袋弄得一团糟。谢谢队友+1
    • 我认为objective-c语言在这里有点愚蠢。如果[array objectAtIndex:outOfBounds] 返回nil 而不是崩溃,我会更舒服。
    【解决方案2】:

    请记住,NSArray 是按顺序0 到 N-1 个项目

    你正在尝试accessitem,它有超过限制并且arraynil,那么编译器会抛出bound error

    编辑:@sch 上面的回答显示了我们如何检查 NSArray 是否需要其中存在的有序项目。

    【讨论】:

    • N个元素的数组从0到N-1依次排列
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      结果:“一些随机的字符串数组......”

      【讨论】:

        猜你喜欢
        • 2018-04-03
        • 2013-11-09
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多