从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将向前移动一个位置后面的数组中的对象。 最后,您甚至可以遍历数组的边界。

如果你想保持你的循环向前运行,你可以:

满足条件时减少iremoveObjectAtIndex

  if (cell.imageView.image == isCkDone) { ... --i ; ... } 

在您的条件不符合时增加i

 for ( int i=0 ; i