我必须时不时地删除一个数组的对象,当我这样做时,我得到了这个错误。
集合 <CALayerArray: 0xc4f3b20> 在枚举时发生了突变
错误出现在这个方法上,它是 Array 的访问者:
- (NSArray *)occupantsArray
{
if (dispatch_get_current_queue() == moduleQueue)
{
return occupantsArray;
}
else
{
__block NSArray *result;
dispatch_sync(moduleQueue, ^{ //ON THIS LINE
result = [occupantsArray copy];
});
return [result autorelease];
}
}
如您所见,我注意不返回原始数组而是返回副本,但它仍然崩溃。
我删除数组元素的方法也是这个。
- (void)eraseJIDFromArray:(NSString*)jid{
dispatch_block_t block = ^{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i = 0;
for(NSString *jidAct in occupantsArray){
if([jidAct isEqualToString:jid]){
[occupantsArray removeObjectAtIndex:i];
}
i++;
}
[pool drain];
};
if (dispatch_get_current_queue() == moduleQueue)
block();
else
dispatch_async(moduleQueue, block);
}
该数组最多可以有 200 个元素,因此可能需要一些时间来遍历所有元素,但我正在设置队列,不知道我还能做什么。
有任何想法吗?
谢谢。