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 正序