< __ NSCFSet:0x74957b0>在被列举时被突变

时间:2011-10-25 20:25:02

标签: objective-c memory-management

我无法解释为什么我的代码崩溃了:

  

< __ NSCFSet:0x74957b0>在被枚举时被突变

以前我读过simular主题,但他们的问题是代码调用不同的线程。我的代码总是在线程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 个答案:

答案 0 :(得分:3)

您获得的错误是由于在您循环播放时更改“观察者”设置的内容造成的。

很难说出你发布的片段可能是什么。您在someObserver上调用的委托中的某些内容是否会更改“观察者”集?

答案 1 :(得分:3)

您可以尝试简单地复制observers集并循环复制:

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

如果您使用ARC(自动引用计数),则无需使用autorelease