从 NSMutableArray 中删除 for 循环中的对象
Posted
技术标签:
【中文标题】从 NSMutableArray 中删除 for 循环中的对象【英文标题】:Deleting objects within a for loop from a NSMutableArray 【发布时间】:2013-01-23 02:38:05 【问题描述】:我正在使用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];
这有什么问题?
【问题讨论】:
【参考方案1】:你必须向后运行你的循环,即
for (int i=c-1;i>=0;--i)
如果您以相反的方式运行它,则删除索引位置i
处的对象会将数组中i
后面的对象向前移动一个位置。最后,您甚至会超出数组的边界。
【讨论】:
如果在删除对象时适当地减少i
,则可以向前运行循环。但是,按照您的建议,向后运行循环会更简单。【参考方案2】:
如果您想保持循环向前运行,您可以:
当你的条件满足并且你removeObjectAtIndex
时减少i
if (cell.imageView.image == isCkDone)
...
--i ;
...
或在不满足您的条件时增加i
仅:
for ( int i=0 ; i<c ; )
...
if (cell.imageView.image == isCkDone)
...
else
++i ;
【讨论】:
以上是关于从 NSMutableArray 中删除 for 循环中的对象的主要内容,如果未能解决你的问题,请参考以下文章