为什么我在 for() 行上收到EXC_CRASH (SIGABRT) 错误



我收到了一个错误日志,其中包含我一直在处理的应用程序,该应用程序正在经历间歇性崩溃,通常是在工作了 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) {

如果要相信行号。

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

订阅者在类的 init 中初始化

_subscribers = [NSMutableArray new];

此后再也不会设置为零。

侦听器通过此方法添加到_subscribers

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

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

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

以及有问题的类:https://pastebin.com/NjGcaNxp(其中违规行是第 73 行(

没关系。我不知何故错过了我正在取消订阅其中一个在线状态:状态更改为:电话。它甚至不是多线程,只是一个直接路径。太蠢了。

通过遍历 [_subscribers 副本] 而不是_subscribers来修复问题。

最新更新