在动态索引处将对象插入到nsmutable数组不起作用

时间:2016-05-03 07:58:32

标签: ios swift nsmutablearray

我正在尝试向数组的每第五行添加URL,但由于一些奇怪的原因,这不起作用。

有效,我想动态制作。

self.tableData.insertObject(url!, atIndex: 0);
self.tableData.insertObject(url!, atIndex: 5);
self.tableData.insertObject(url!, atIndex: 10);
self.tableData.insertObject(url!, atIndex: 15);
self.tableData.insertObject(url!, atIndex: 20);
self.tableData.insertObject(url!, atIndex: 25);

数组:

var tableData:NSMutableArray = NSMutableArray()

我试过的循环应该可以工作。

for(var i = 0; i < (tableData.count + 3); i += 1) {
      if(i % 5 == 0){
          dispatch_async(dispatch_get_main_queue())
           {
             self.tableData.insertObject(url!, atIndex: i);
           }
       }

}

错误:

  

'NSRangeException',原因:' - [__ NSCFArray insertObject:atIndex:]:index(26)超出边界(24)'

3 个答案:

答案 0 :(得分:3)

索引不在array.count范围内。

答案 1 :(得分:3)

数组有24项,您正在尝试获取项目编号26.这是不可能的。

答案 2 :(得分:2)

正如@patrick和@chronikum所说,你的索引,或i“越过边缘”

你的问题在于:

for(var i = 0; i < (tableData.count + 3); i += 1)

如果你的tableData中有24个元素,那么你实际上循环了3个不存在的元素。如果您实际上没有在循环中执行任何操作,那将会有效。

但是当你说:

self.tableData.insertObject(url!, atIndex: i);

i大于tableData.count,那么您试图在tableData中的某个位置插入一些不存在的位置(在这种情况下为26,在一个数组中24个元素)。

我不知道这是否符合您的要求,但一个简单的解决方法是只运行到tableData的末尾,这样您就可以将for循环更改为:

for(var i = 0; i < (tableData.count); i += 1)

如果您想更多地执行“Swifty”,那么您可以查看The Swift Programming Guide中所述的enumerate函数(搜索“迭代数组”)

希望有所帮助。