当 url 不是图像时,AlamoFireImage 类型为 NSException 的未捕获异常

uncaught exception of type NSException with AlamoFireImage when url isn't an image

我正在使用 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")
            }
        }
    }
}

这大部分工作正常。我正在从 JSON 对象获取 url 并尝试在 url 处获取图像。大多数情况下这工作正常并且 returns 图像如预期的那样或者如果 url 字符串为 404 或其他无效则失败。

然而今天我的应用开始崩溃

libc++abi.dylib: terminating with uncaught exception of type NSException

我将其缩小到上述方法,其中我的 JSON 响应给我一个 url 错误,它没有指向图像。

if 如果我得到的 url 图像是“https://bbc.co.uk/news/" that that causes the crash. However if I search for an image at "https://www.google.co.uk/maps/”,它按预期失败但没有崩溃并通过错误处理进行处理。

我知道最好的解决方案是只将正确的图像 url 放入 JSON 中,但在与人打交道时可能会发生错误。那么,是否有一个原因 'fail correctly' 而另一个使我的应用程序崩溃?如何防止在某些无效的 url 上发生崩溃?

我找到了我的问题的解决方案,我没有感到惊讶,因为问题不在上面。我查看了之前的答案here并设置了异常断点。

我的应用程序也在使用 Realm(起初看起来并不相关)。我用来自 Realm 的数据填充 UITableViewCell。然后我下载了 JSON 并创建了新对象并删除了旧领域的对象。

然后异常断点停止在

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

在椰子中。当我在领域中保存字符串或 url 而不是 url 时,我猜测单元格开始下载,然后无效并假设这就是导致崩溃的原因。