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

Я использую 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-адресах?


person StartPlayer    schedule 22.10.2018    source источник


Ответы (1)


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

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

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

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

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

person StartPlayer    schedule 23.10.2018