为什么在 for() 行上出现 EXC_CRASH (SIGABRT) 错误
Why do I get a EXC_CRASH (SIGABRT) error on a for() line
我收到了一个我一直在使用的应用程序的错误日志,该应用程序遇到间歇性崩溃,通常是在工作 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在class
的init中初始化
_subscribers = [NSMutableArray new];
此后永远不会设置为零。
通过此方法将听众添加到 _subscribers
- (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
[_subscribers addObject:subscriber];
}
并且每个调用该方法的 class 确实使用 OnlineStatusSubscriber 接口并实现 onlineStatus:statusChangedTo: 方法。
我已将错误日志添加到 pastebin:https://pastebin.com/Ux0XRm15
以及有问题的 class:https://pastebin.com/NjGcaNxp(违规行是第 73 行)
没关系。我不知何故错过了我正在取消订阅 onlineStatus:statusChangedTo: 电话之一。它甚至不是多线程,只是一条直接路径。好傻
问题已通过遍历 [_subscribers copy] 而不是 _subscribers 得到解决。
我收到了一个我一直在使用的应用程序的错误日志,该应用程序遇到间歇性崩溃,通常是在工作 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在class
的init中初始化_subscribers = [NSMutableArray new];
此后永远不会设置为零。
通过此方法将听众添加到 _subscribers
- (void)subscribe:(id<OnlineStatusSubscriber>)subscriber {
[_subscribers addObject:subscriber];
}
并且每个调用该方法的 class 确实使用 OnlineStatusSubscriber 接口并实现 onlineStatus:statusChangedTo: 方法。
我已将错误日志添加到 pastebin:https://pastebin.com/Ux0XRm15
以及有问题的 class:https://pastebin.com/NjGcaNxp(违规行是第 73 行)
没关系。我不知何故错过了我正在取消订阅 onlineStatus:statusChangedTo: 电话之一。它甚至不是多线程,只是一条直接路径。好傻
问题已通过遍历 [_subscribers copy] 而不是 _subscribers 得到解决。