我正在尝试向数组的每第五行添加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)'
答案 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
函数(搜索“迭代数组”)
希望有所帮助。