Ios 使用fast enumarion时崩溃:uu NSFastEnumerationMutationHandler+;124在for循环中

Ios 使用fast enumarion时崩溃:uu NSFastEnumerationMutationHandler+;124在for循环中,ios,objective-c,nsmutablearray,nsarray,nsdictionary,Ios,Objective C,Nsmutablearray,Nsarray,Nsdictionary,我遇到了非常随机的崩溃错误:\uu NSFastEnumerationMutationHandler+124在对象下载失败时执行for循环。我相信我知道原因,但我想让大家放心,看看这是否真的是问题所在,因为这不是一个很容易重现的bug。这就是我正在执行的代码。在做一些研究时,我似乎在改变某些东西,但这就是为什么我创建了:newArrayCopyNSMutableArray,试图避免这个问题 NSMutableArray *newArrayCopy = [self.dataSource objec

我遇到了非常随机的崩溃错误:
\uu NSFastEnumerationMutationHandler+124
在对象下载失败时执行for循环。我相信我知道原因,但我想让大家放心,看看这是否真的是问题所在,因为这不是一个很容易重现的bug。这就是我正在执行的代码。在做一些研究时,我似乎在改变某些东西,但这就是为什么我创建了:
newArrayCopy
NSMutableArray
,试图避免这个问题

NSMutableArray *newArrayCopy = [self.dataSource objectForKey:@"Messages"];

for (NSDictionary *sub in [self.dataSource objectForKey:@"Messages"])
{
    if ([[sub objectForKey:@"MessageID"]isEqualToString:[self.downloadDictionary objectForKey:@"MessageID"]])
    {
        NSMutableDictionary *updatedDict = [NSMutableDictionary dictionaryWithDictionary:sub];
        [updatedDict setObject:@"YES" forKey:@"Bypass"];

        [newArrayCopy replaceObjectAtIndex:[newArrayCopy indexOfObject:sub] withObject:updatedDict];

        // This line below is perhaps the culprit?
        [self.dataSource setObject:newArrayCopy forKey:@"Messages"];

        [self.tableView reloadData];
     }
}

出现问题是因为我在for循环完成之前在if语句中设置了
self.dataSource

您正在修改正在枚举的数组,这是不允许的。您可以通过枚举副本来克服它

for (NSDictionary *sub in [[self.dataSource objectForKey:@"Messages"] copy]) {
    //....
}

小心!枚举时不应修改
NSMutableArray
。您应该制作一个副本来执行此操作是的,在这里:
[self.dataSource setObject:newArrayCopy forKey:@“Messages”]
@vikingosegundo我应该在
重新加载数据后中断循环吗
您将无法在那里运行。也许if语句从未触发过?