【问题标题】:kingfisher causing main thread issue翠鸟导致主线程问题
【发布时间】:2019-12-18 06:30:14
【问题描述】:

所以该应用程序在测试模式下工作,但是当我开始构建发布时,我遇到了这个主线程问题。

UIImageView.image must be used from main thread only

根据错误我没有在主线程上调用某些东西,但它引发线程错误的行是空白的(见截图)

所以我只能猜他们说的是那一行下面的代码吗?

代码

@objc func nowplaying(){
          let jsonURLString = "https://api.drn1.com.au/station/playing"
                  guard let feedurl = URL(string: jsonURLString) else { return }

                  URLSession.shared.dataTask(with: feedurl) { (data,response,err)
                      in

                      guard let data = data else { return }

                      do{
                          let nowplaying = try JSONDecoder().decode(Nowplayng.self, from: data)

                          nowplaying.data.forEach {

                              DispatchQueue.main.async {


                              self.artist.text = nowplaying.data.first?.track.artist
                              self.song.text = nowplaying.data.first?.track.title

                              }


                              print($0.track.title)

                              if var strUrl = nowplaying.data.first?.track.imageurl {

                                  strUrl = strUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
                                  self.imageurl.kf.setImage(with: URL(string: strUrl), placeholder: nil)

                                //MusicPlayer.shared.nowplaying(artist:  $0.track.artist, song: $0.track.title, cover:strUrl)
                                MusicPlayer.shared.getArtBoard(artist: $0.track.artist, song: $0.track.title, cover:strUrl)
                              }


                         }

我只能猜测是因为翠鸟想要加载图片或其他东西。但不清楚?

【问题讨论】:

    标签: ios swift kingfisher


    【解决方案1】:

    It is your responsibility 在 UI 线程上调用 Kingfisher 的 UI 扩展方法。

    之前:

    self.imageurl.kf.setImage(with: URL(string: strUrl), placeholder: nil)
    

    之后:

    DispatchQueue.main.async {
        self.imageurl.kf.setImage(with: URL(string: strUrl), placeholder: nil)
    }
    

    【讨论】:

      【解决方案2】:

      我相信您始终可以在自己的处理器的主线程中运行代码,方法是: 下载线程上的 King Fisher 进程映像,因此可能导致此问题

      public func process(item: ImageProcessItem, options: KingfisherOptionsInfo) -> Image?
          return DispatchQueue.main.sync {
              let image = ... // Your code needs to be performed in UI thread
              return image
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-06-02
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多