调试过程中,有没有遇到过这样的崩溃信息:
*** Collection <__NSArrayM: 0x1706527b0> was mutated while being enumerated.
翻译:数组正在被列举的时候发生了突变。
引起这种情况的代码如下:
for (ZLPhotoAssets *selectAsset in _selectAssets) {
if ([selectAsset.assetURL isEqual:asset.assetURL]) {
[_selectAssets removeObject:selectAsset];
}
}
解读:
如果这个_selectAssets有10个元素,在for循环没执行完时对它进行了删除操作,刚好删除的是未循环到的元素,那么等到循环到被删除的那个元素的时候就会发生崩溃。
解决办法:
方法1. 执行删除动作后跳出循环,就是增加break,代码如下:
for (ZLPhotoAssets *selectAsset in _selectAssets) {
if ([selectAsset.assetURL isEqual:asset.assetURL]) {
[_selectAssets removeObject:selectAsset];
break;
}
}
方法2. 先把_selectAssets赋给另外一个数组,然后在另外的这个数组中进行for循环,这时对_selectAssets进行删除操作就没事了。注意数组不要直接赋值,否则地址一样还是不能解决问题。