<__NSCFSet: 0x74957b0> был мутирован при перечислении - PullRequest
1 голос
/ 26 октября 2011

Я не могу понять, почему мой код дает сбой:

<__NSCFSet: 0x74957b0> был мутирован при перечислении

Раньше я читал симулированные темы, но их проблема заключалась в том, что код вызывал разные потоки. Мой код всегда вызывает в теме 1.

Время от времени падает.

Вот код, где это происходит:

- (void)processReceivedResponse:(JTResponse *)aResponse {

    NSParameterAssert(aResponse);

    id <JTRequestDelegate> delegate = [self processResponseWithReceiver:aResponse];

    if (delegate == nil) {

        for (JTObserver *someObserver in observers) {

            if (someObserver.requestType == aResponse.type && 
                     ![someObserver.delegate isEqual:delegate]) {

                [someObserver.delegate didReceiveResponse:aResponse];
            }
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Вы можете просто скопировать набор observers и повторить копию:

for (JTObserver *someObserver in [[observers copy] autorelease]) {
    ...
}

Если вы используете ARC (автоматический подсчет ссылок), вам не нужно использовать autorelease.

3 голосов
/ 26 октября 2011

Ошибка, которую вы получаете, вызвана чем-то, изменяющим набор «наблюдателей», пока вы просматриваете его.

Трудно сказать, что это может быть из всего фрагмента, который вы разместили.Что-то в делегате, который вы вызываете на someObserver, изменяет набор «наблюдателей»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...