【问题标题】:UIImageView image load issue with some specific URL's某些特定 URL 的 UIImageView 图像加载问题
【发布时间】:2017-11-06 12:56:48
【问题描述】:

我正在使用 Alamofire(适用于 Swift)和 AFNetworking(适用于 Objective c),但我都面临着同样的问题。

这是一个示例网址

https://static.toiimg.com/photo/msid-61516774/61516774.jpg?59422

非常基本的 URL,但是当我尝试 setImage 时,它​​无法加载图像。当我尝试在 Google Chrome 中加载相同的 URL 时,它很容易加载,但在 Safari 上尝试时加载失败。它只是下载图像。

谁能建议我可以做些什么来处理此类 URI?

我在我的代码中没有做任何花哨的事情。非常基本的 Alamofire/Afnetworking

setImageWithUrl:PlaceHolderImage: 两者的方法。

提前致谢。

【问题讨论】:

  • 显示setImage代码
  • 如果您使用AFNetworking 的相应方法,例如使用completionHandler(如setImageWithURLRequest:placeholderImage:success:failure:),您就会明白为什么它会失败。它给了我这个:“错误域=com.alamofire.error.serialization.response Code=-1016”请求失败:不可接受的内容类型:图像/jpg“用户信息={NSLocalizedDescription=请求失败:不可接受的内容类型:图像/ .jpg”。您可能会开始对此进行挖掘,响应的内容类型可能设置错误。
  • 像这样使用“SDWebImage”它的工作原理:imageview.sd_setImage(with: URL(string: "static.toiimg.com/photo/msid-61516774/61516774.jpg?59422"), completed: nil)
  • 要在@Dix 答案上添加信息,SDWebImage 似乎会检查数据 (github.com/rs/SDWebImage/blob/master/SDWebImage/…) 而不是仅依赖标头。

标签: ios uiimageview afnetworking alamofire alamofireimage


【解决方案1】:

这是您的图像所在的服务器的问题。

否则,如果您尝试使用不同的网址,例如,

 [_myImageView setImageWithURL:[NSURL URLWithString:@"https://static.pexels.com/photos/236636/pexels-photo-236636.jpeg"] placeholderImage:nil];

然后它工作正常,但如果我尝试使用您的网址,我会在日志中收到 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)nw_coretls_read_one_record tls_handshake_process: [-9824] 错误。

有可能你的TLS 版本在你的服务器端已经过时了!

从服务器解决问题,您的代码将起作用!

【讨论】:

    【解决方案2】:

    斯威夫特 3

     func loadImage() {
    
        let url = NSURL(string: "https://static.toiimg.com/photo/msid-61516774/61516774.jpg?59422")!
    
        let task = URLSession.shared.dataTask(with: url as URL) { (responseData, responseUrl, error) -> Void in
            if let data = responseData{
    
                DispatchQueue.main.async(execute: { () -> Void in
                    self.yourImageView.image = UIImage(data: data)
                })
            }
        }
    
        task.resume()
    }
    

    希望它有效。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多