为什么在for()行上出现EXC_CRASH(SIGABRT)错误

时间:2018-08-14 13:17:29

标签: ios objective-c ipad afnetworking afnetworking-3

我收到了我正在使用的应用的错误日志,该应用遇到间歇性崩溃,通常是在工作30分钟以上之后。日志中收到的异常的类型为EXC_CRASH(SIGABRT)。我自己没有经历过崩溃,也没有访问有问题的设备的权限,因此,在尝试复制问题时,我只需要保存日志即可。

符号化日志后,似乎罪魁祸首是以下代码位(错误日志中线程0的位置10)

if(oldStatus != _connected) {
    for(id<OnlineStatusSubscriber> subscriber in _subscribers) {
        [subscriber onlineStatus:self statusChangedTo:_connected];
    }
}

具体

for(id<OnlineStatusSubscriber> subscriber in _subscribers) {

如果要相信行号。

我无法弄清楚这里可能出了什么问题。

用户在类的初始化中初始化

_subscribers = [NSMutableArray new];

,此后再也不会设置为零。

通过这种方法,侦听器被添加到_subscribers

- (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
    [_subscribers addObject:subscriber];
}

,并且每个调用该方法的类都使用OnlineStatusSubscriber接口并实现onlineStatus:statusChangedTo:方法。

我已将错误日志添加到pastebin:https://pastebin.com/Ux0XRm15

以及相关的类:https://pastebin.com/NjGcaNxp(其中令人讨厌的行是第73行)

1 个答案:

答案 0 :(得分:0)

没关系。我以某种方式错过了我正在退订的其中一个onlineStatus:statusChangedTo:调用。它甚至不是多线程,而是直接路径。太蠢了。

通过遍历[_subscribers copy]而不是_subscribers来解决问题。