您的位置:首页 > 移动开发 > IOS开发

iOS - 解决was mutated while being enumerated

2016-12-14 20:17 856 查看
reason: '*** Collection <__NSArrayM: 0x610000253e30> was mutated while being enumerated.'


原因:

在遍历数组的同时删除了数组中的元素

OC语法规定,不能在遍历数组的时候删除数组中的元素

解决方案

例如下面的代码,在遍历images的时候删除了images中的元素

for (UIImage *image in self.images) {
if (image.size.width > 100) {
// 将图片从数组中移除
[self.images removeObject:image];
}
}


我们可以再搞一个数组来存放要删除的图片

/** 存放要删除的图片 */
@property(nonatomic, strong) NSMutableArray *deleteImages;


- (NSMutableArray *)deleteImages {
if (_deleteImages == nil) {
_deleteImages = [NSMutableArray array];
}
return _deleteImages;
}


在遍历完images后再遍历deleteImages来删除images中要删除的图片,最后将deleteImages清空

for (UIImage *image in self.images) {
if (image.size.width > 100) {
// 将图片从数组中移除
[self.images removeObject:image];
}
}

// 遍历数组
for (UIImage *image in self.deleteImages) {
// 删除images数组中的元素
[self.images removeObject:image];
}
// 删除deleteImages数组中的图片
[self.deleteImages removeAllObjects];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios
相关文章推荐