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

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

IOS小彩虹2021-08-23 20:13:09250A+A-

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

究其原因是数组遍历的情况下其对象的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 正序

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们