Загрузка URL-адреса при сбое Alamofire с помощью [NSHTMLWebDelegate responsedsToSelector:]: сообщение отправлено на освобожденный экземпляр
Я загружаю URL с помощью Alamofire и отображаю полученный HTML-код в текстовой метке. Около 15% загрузок вызывают сбой приложения с помощью EXC_BAD_ACCESS. Включение зомби дает мне [NSHTMLWebDelegate respondsToSelector:]: message sent to deallocated instance
Вот мой код:
func downloadArticle(completed: @escaping DownloadComplete) {
Alamofire.request(articleURL).responseString { response in
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
self.article = utf8Text
print("HTML: \(String(describing: self.article))")
} else {
self.article = "Sorry, an error occurred, please go back and try again"
EZLoadingActivity.hide(false, animated: true)
}
completed()
}
}
В блоке завершения я конвертирую utf8 в атрибутивную строку, закодированную для отображения HTML:
if var attrArticle = self.article?.html2AttributedString {
if let lowVision = self.lowVision {
print("Low Vision?: \(lowVision)")
attrArticle = attrArticle.changeHTMLFont(attrArticle)
EZLoadingActivity.hide(true, animated: true)
self.attrArticleStr = attrArticle
print("Low Vision Article Loaded")
} else {
print("Attr Article Loaded")
EZLoadingActivity.hide(true, animated: true)
self.attrArticleStr = attrArticle
}
} else {
self.article = "Sorry, an error occurred, please go back and try again"
EZLoadingActivity.hide(false, animated: true)
}
DispatchQueue.main.async {
if let attrArticle = self.attrArticleStr {
print("attributed text loaded from downloadArticle")
/********CRASH EXC_BAD_ACCESS TRACED TO HERE*********/
self.articleLbl.attributedText = attrArticle
/***************************************************/
} else if let article = self.article {
print("attributed text not loaded. Error?")
self.articleLbl.text = article
}
}
Изменить - мне удалось определить 7 как точку сбоя, хотя трассировка не указывает ни на какие строки кода. Я не знаю, как устранить ошибку - насколько я могу судить, я не делаю ничего, что могло бы вызвать релиз слишком рано, но я должен быть:
0 Malloc +1 1 00:58.566.055 UIFoundation -[NSHTMLReader _loadUsingWebKit]
1 Retain +1 2 00:58.574.124 WebKitLegacy WebDocumentLoaderMac::setDataSource(WebDataSource*, WebView*)
2 Release -1 1 00:58.948.238 WebKitLegacy WebDocumentLoaderMac::decreaseLoadCount(unsigned long)
3 Retain +1 2 00:59.270.606 WebKitLegacy WebDocumentLoaderMac::setDataSource(WebDataSource*, WebView*)
4 Retain +1 3 00:59.271.357 WebKitLegacy WebDocumentLoaderMac::setDataSource(WebDataSource*, WebView*)
5 Release -1 2 00:59.345.277 WebKitLegacy WebDocumentLoaderMac::~WebDocumentLoaderMac()
6 Release -1 1 00:59.348.356 WebKitLegacy WebDocumentLoaderMac::decreaseLoadCount(unsigned long)
7 Release -1 0 00:59.763.655 UIFoundation -[NSHTMLReader dealloc]
8 Zombie -1 00:59.833.813 WebCore HandleDelegateSource(void*)