необработанное исключение типа NSException с AlamoFireImage, когда URL не является изображением - PullRequest
0 голосов
/ 22 октября 2018

Я использую AlamofireImage для отображения изображений в UITableViewCell

typealias boolAndAnyCompletion = (_ success: Bool, _ value: Any?) -> Void

class ImageHelper {

    func fetchImage(url:String, completion: @escaping boolAndAnyCompletion) {
            Alamofire.request(url).responseImage { response in

            if let image = response.result.value {
                completion(true, image)
            } else  {
                completion(false, "No image")
            }
        }
    }
}

Это в основном работает нормально.Я беру URL-адрес из объекта JSON и попытался получить изображение по URL-адресу.В основном это работает нормально и либо возвращает изображение, как ожидалось, либо завершается ошибкой, если строка URL-адреса 404 или иным образом недопустима.

Однако сегодня я начал получать сбой моего приложения с помощью

libc ++ abi.dylib: завершается с невостребованным исключением типа NSException

Я сузил это до описанного выше метода, где мой JSON-ответ давал мне URL-адрес по ошибке, который не указывал на изображение.

если, если URL-адрес, который я получил для изображения, был "https://bbc.co.uk/news/", то это вызывает сбой. Однако, если я ищу изображение в" https://www.google.co.uk/maps/", которое завершается с ошибкой, как ожидалось, без сбояи обрабатывается с помощью обработки ошибок.

Я знаю, что наилучшее решение заключается в том, чтобы в JSON помещались только правильные URL-адреса изображений, но при этом имело место, что люди делают это, и ошибки могут произойти.Итак, есть ли причина, по которой один из них «правильно провалится», когда другой зависал в моем приложении?Как я могу предотвратить этот сбой на некоторых недействительных URL?

1 Ответ

0 голосов
/ 23 октября 2018

Я нашел решение своей проблемы и не удивился, что не получил ответа, так как проблема не была выше.Я смотрю на предыдущий ответ здесь и устанавливаю точку останова исключения.

Мое приложение также использует Realm (что на первый взгляд не имело значения).Я заполнял UITableViewCell данными из Realm.Затем я скачал JSON и создал новые объекты и удалил старые.

Точка останова исключения затем остановилась на

 @throw RLMException(@"Object has been deleted or invalidated.") 

В cocoapod.Поскольку я сохранял строку или URL-адрес, а не URL-адрес в области, я предполагаю, что ячейка начала загрузку, затем была признана недействительной и предположила, что именно это вызвало сбой.

...