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

Posted

技术标签:

【中文标题】当 url 不是图像时,使用 AlamoFireImage 未捕获的 NSException 类型异常【英文标题】:uncaught exception of type NSException with AlamoFireImage when url isn't an image 【发布时间】:2018-10-22 12:27:21 【问题描述】:

我正在使用 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 处获取图像。大多数情况下,这可以正常工作,并且如果 url 字符串为 404 或其他无效,则按预期返回图像或失败。

但是今天我开始让我的应用程序崩溃了

libc++abi.dylib:以 NSException 类型的未捕获异常终止

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

如果我获得的图片网址是“https://bbc.co.uk/news/”,则会导致崩溃。但是,如果我在“https://www.google.co.uk/maps/”处搜索图像,该图像会按预期失败,但不会崩溃并通过错误处理进行处理。

我知道最好的解决方案是仅将正确的图像 URL 放入 JSON 中,但如果是人工处理,则可能会发生错误。那么,是否有一个原因会“正确失败”而另一个导致我的应用程序崩溃?如何防止某些无效 url 崩溃?

【问题讨论】:

【参考方案1】:

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

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

然后异常断点停在

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

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

【讨论】:

以上是关于当 url 不是图像时,使用 AlamoFireImage 未捕获的 NSException 类型异常的主要内容,如果未能解决你的问题,请参考以下文章

为啥在rails中链接css中的图像时使用ASSET_PATH而不是Image-url

在 iOS Swift 中从设备获取图像的 URL 路径

如何在 Flutter Web 中显示 Firebase 存储图像。我有图片网址。显示 URL 而不是图像。但另一侧图像链接已完美完成

如何在 Android WebView 中使用 HitTestResult 获取链接 URL,用于使用 Longclick 链接图像(而不是图像 URL)

file_exists() 不起作用,但是当在浏览器中给出图像的 url 时,会显示图像

html下载属性重定向到url而不是下载