- [__ NSArrayI objectAtIndex:]:索引2超出边界[0 .. 1]

时间:2016-07-20 14:23:37

标签: objective-c

我正在尝试从两个数组中获取数据,并从第三个数组获取该数据的数据。一切正常,直到第二次迭代。 tagsIdarray和tagsArray每个都有3个数组,每个数组都有各自的计数(基本上它是数组数组)。 pretagarray有各自的计数。

 if(tagsArray!=(id)[NSNull null])
         {
             for(int i=0;i<[tagsArray count];i++)
             {
                 for(int j=0;j<[[tagIdsArray objectAtIndex:i] count];j++){
                     if([[tagIdsArray objectAtIndex:i]objectAtIndex:j]==[preTagArray objectAtIndex:j])
                     {
                         selectedTagCompleteArray = [[tagsArray objectAtIndex:i]objectAtIndex:j];
                     }
                 }
             }
         }
  

示例tagsArray objectAtIndex:i count = 4,5,20   tagsIdsArray objectAtIndex:i count = 4,10,8   pretagArryCount = 15

2 个答案:

答案 0 :(得分:0)

这是你要找的?

if(tagsArray!=(id)[NSNull null])
{
    for(int i=0;i<[tagsArray count];i++)
    {
        NSArray *tagsArrayElement = [tagIdsArray objectAtIndex:i];

        for(int j=0;j<[tagsArrayElement count];j++){
            id tagElement = [tagsArrayElement objectAtIndex:j];

            for(int k=0;k<[preTagArray count];k++){
                id preTagElement = [preTagArray objectAtIndex:k];

                if(tagElement==preTagElement)
                {
                    selectedTagCompleteArray = tagElement;
                }
            }
        }
    }
}

答案 1 :(得分:0)

很难理解您要使用代码完成的任务。您收到的错误是因为您尝试访问不存在的NSArray上的索引。如果没有准确了解您希望实现的结果,很难提供实现,但是避免崩溃的一种方法是在使用{{1} 之前检查objectAtIndex: s 的计数。 }。像这样:

if ([tagsIdsArray count] == [preTagArray count]) {
     //the arrays match and you can safely iterate
}
else {
     //the array sizes do not match and will crash if you iterate
}

如果NSArray计数不相等,那么迭代它们执行操作可能没有意义。我会想一想为什么数组不匹配。很明显,你的一个数组只有2个值,因为它似乎通过索引0和1.你可以尝试NSLog()每个数组的数组计数(或记录objectAtIndex:)你的循环和这可能会成为罪魁祸首。