动态地将对象插入索引处的 nsmutablearray 不起作用
Insert object to nsmutable array at index dynamicly is not working
我正在尝试向数组的每第五行添加一个 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', reason: '-[__NSCFArray insertObject:atIndex:]: index (26) beyond bounds (24)'
索引不在 array.count 范围内。
数组有 24 个项目,您正在尝试获取项目编号 26。这是不可能的。
正如@patrick 和@chronikum 所说,您的索引或 i
运行 "over the edge"
你的问题出在这里:
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
函数(搜索 "Iterating Over an Array")
希望对您有所帮助。
我正在尝试向数组的每第五行添加一个 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', reason: '-[__NSCFArray insertObject:atIndex:]: index (26) beyond bounds (24)'
索引不在 array.count 范围内。
数组有 24 个项目,您正在尝试获取项目编号 26。这是不可能的。
正如@patrick 和@chronikum 所说,您的索引或 i
运行 "over the edge"
你的问题出在这里:
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
函数(搜索 "Iterating Over an Array")
希望对您有所帮助。