GenericException:集合被枚举时发生了变化

问题描述:

我已经搜索了这个问题,并且我知道它是由于枚举操作数组而导致的。在我的代码早些时候,我用的是:GenericException:集合被枚举时发生了变化

-(BOOL)busy 
{ 
for(DataRequest* request in self.active) 
    if(!request.invisible) 
     return YES; 

return NO; 
} 

-(BOOL)busy被称为非常频繁从服务器的数据负载。同样在我的代码中,我有一些行添加和删除self.active中的对象。正因为如此,我得到了这个例外。然后我在代码中做了如下更改:

-(BOOL)busy 
{ 
self.tempActive = self.active; 
for(DataRequest* request in _tempActive) 
    if(!request.invisible) 
     return YES; 

return NO; 
} 

但我仍然收到相同的异常。我做错了什么,有什么想法?这是使用self.tempActive的唯一代码。

我得到的例外是:

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x9ec8f60> was mutated while being enumerated.' 
+0

什么是异常? –

+0

self.tempActive = self.active只是复制指针 - 因此您要继续引用相同的数组。我不确定你有什么问题 - 但是如果这与直接访问self.active有关,那么你应该复制它self.tempActive = [self.active copy]。这样你有一个不同的对象,它是原始数组的副本。希望能帮助到你。 – tanzolone

您需要了解类和栈对象(如整数和事物)之间的差异。设置一些与其他东西相同的东西而不是如果它是一个类,则将其复制一份。您需要改用[self.active copy]