iOS 遍历数组删除引发崩溃问题

2019-06-11  本文已影响0人  Singularity_Lee

在对旧项目进行新需求更新的时候发现了之前的一个问题,在数组遍历中删除数组中指定某一对象会引发崩溃。

究其原因是数组遍历的情况下其对象的index不做更新,此时删除某一对象后下次循环的index出错造成数组越界问题从而引发崩溃。

解决方式使用for循环倒序排列删除即可

for (NSInteger i=self.viewModel.shopGoods.count-1; i>=0; --i) {
    WGShopCarModel *shopModel=[self.viewModel.shopGoods objectAtIndex:i];
    if (shopModel.goodsList.count==0) {
       [self.viewModel.shopGoods removeObject:shopModel];
    }
}

但这样从虽然正确了但看着别扭,因此推荐用enumerate方式遍历

[self.viewModel.shopGoods enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                
    WGShopCarModel *shopModel=[self.viewModel.shopGoods objectAtIndex:idx];
    if (shopModel.goodsList.count==0) {
        [self.viewModel.shopGoods removeObject:shopModel];
    }
}];

NSEnumerationReverse 倒序 NSEnumerationConcurrent 正序

上一篇下一篇

猜你喜欢

热点阅读