配列のオブジェクトを時々削除する必要がありますが、そうするとこのエラーが発生します。
コレクション < CALayerArray: 0xc4f3b20> が列挙中に変更されました
エラーは、配列のアクセサーであるこのメソッドに表示されます。
- (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 個の要素を含めることができるため、すべての要素を処理するには時間がかかる場合がありますが、キューを設定しているため、他に何ができるかわかりません。
何か案は?
ありがとう。