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.'
答
您需要了解类和栈对象(如整数和事物)之间的差异。设置一些与其他东西相同的东西而不是如果它是一个类,则将其复制一份。您需要改用[self.active copy]
。
什么是异常? –
self.tempActive = self.active只是复制指针 - 因此您要继续引用相同的数组。我不确定你有什么问题 - 但是如果这与直接访问self.active有关,那么你应该复制它self.tempActive = [self.active copy]。这样你有一个不同的对象,它是原始数组的副本。希望能帮助到你。 – tanzolone