从NSMutableArray中删除for循环中的对象
我正在使用UITableView
并且对于UITableView
的数据源数组中的每个对象,如果它们满足某个if
语句,我将删除它们。 我的问题是它只删除数组中的每个其他对象。
码:
UIImage *isCkDone = [UIImage imageNamed:@"UITableViewCellCheckmarkDone"]; int c = (tasks.count); for (int i=0;i<c;++i) { NSIndexPath *tmpPath = [NSIndexPath indexPathForItem:i inSection:0]; UITableViewCell * cell = [taskManager cellForRowAtIndexPath:tmpPath]; if (cell.imageView.image == isCkDone) { [tasks removeObjectAtIndex:i]; [taskManager deleteRowsAtIndexPaths:@[tmpPath] withRowAnimation:UITableViewRowAnimationLeft]; } }
这有什么问题?
你必须向后运行你的循环,即
for (int i=c-1;i>=0;--i)
如果你以相反的方式运行它,在索引位置移除一个对象, i
将向前移动一个位置后面的数组中的对象。 最后,您甚至可以遍历数组的边界。
如果你想保持你的循环向前运行,你可以:
满足条件时减少i
并removeObjectAtIndex
if (cell.imageView.image == isCkDone) { ... --i ; ... }
或仅在您的条件不符合时增加i
:
for ( int i=0 ; i