CALayerArray wurde während der Aufzählung mutiert
Ich muss hin und wieder ein Objekt eines Arrays löschen, wenn ich es tue, erhalte ich diesen Fehler.
Die Auflistung <CALayerArray: 0xc4f3b20> wurde während der Aufzählung mutiert
Der Fehler tritt bei dieser Methode auf, bei der es sich um den Zugriff auf das Array handelt:
<code>- (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]; } } </code>
Wie Sie sehen können, kümmere ich mich darum, nicht das ursprüngliche Array, sondern eine Kopie zurückzugeben, aber es stürzt immer noch ab.
Dies ist auch die Methode, mit der ich Elemente des Arrays lösche.
<code>- (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); } </code>
Das Array kann bis zu 200 Elemente enthalten, daher kann es einige Zeit dauern, bis alle Elemente abgearbeitet sind. Ich stelle jedoch Warteschlangen ein und weiß nicht, was ich sonst noch tun kann.
Irgendwelche Ideen?
Vielen Dank.