代码之家  ›  专栏  ›  技术社区  ›  StartPlayer

当URL不是图像时,具有AlamOfireImage的nsException类型的未捕获异常

  •  1
  • StartPlayer  · 技术社区  · 6 年前

    我正在使用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。

    如果我得到的图像的URL是“ https://bbc.co.uk/news/ “那导致了车祸。但是如果我在 https://www.google.co.uk/maps/ “没有崩溃,而是按预期失败,并通过错误处理进行处理。

    我知道最好的解决方案是只将正确的图像URL放在JSON中,但是要处理这样做的人,可能会发生错误。那么,有没有一个会“正确失败”的原因,另一个会让我的应用程序崩溃?如何防止某些无效的URL崩溃?

    1 回复  |  直到 6 年前
        1
  •  0
  •   StartPlayer    6 年前

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

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

    异常断点随后在停止

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

    在可可中。当我保存一个字符串或URL,而不是域中的URL时,我猜想这个单元开始下载,然后就失效了,并假设这就是导致崩溃的原因。

    推荐文章