删除内的对象进行循环从NSMutableArray中(Deleting objects within

2019-08-07 22:00发布

我有一个工作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];
    }
}

有什么不对呢?

Answer 1:

你必须倒着跑你的循环,即

for (int i=c-1;i>=0;--i)

如果您正在运行一轮用另一种方式,消除索引位置的对象i移动是背后的数组中的对象i一个位置前移。 最后,你甚至会运行在你的数组的边界。



Answer 2:

如果你想保持你的循环向前跑,你既可以:

减量i当你的条件得到满足,你removeObjectAtIndex

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

或增加i 当没有满足您的条件:

for ( int i=0 ; i<c ; ) {
    ...
    if (cell.imageView.image == isCkDone) {
        ...
    } else {
    ++i ;
    }


文章来源: Deleting objects within a for loop from a NSMutableArray