下载的图像并不会立即显示

时间:2017-01-12 10:03:31

标签: ios swift firebase firebase-storage

由于某些原因,我的photoimg不会一直更新,有时它确实有时它没有。

我非常确定它与异步调用有关,但我一直在试图找出其未更新的根本原因。所以这是在我的mainVC中,并且对于用户上传/更新图像,他们转到settingsVC,当他们有时向后移动它显示更新的图像时,其他时间仍然显示旧图像,其他时间没有显示任何内容。但奇怪的是,如果我点击我的设置并关闭它,那么图像将显示更新。

所以我认为我的问题在于我调用我的方法和异步队列。

func fetchProfileImage() {

    Dataservice.dataService.USERS_REF_CURRENT_PROFILE_IMAGE.downloadURL { (url, error) in
        if error != nil {     
        }
        else {

            let url = url?.downloadURL

            URLSession.shared.dataTask(with: url!, completionHandler: { (data, resonse, error) in
                if error != nil {
                    print("Fetching did not download \(error.debugDescription)")

                }

                if let data = data {
                    print("Fetching Image did download data")

                    DispatchQueue.main.async {
                        self.profilePhoto.image = UIImage(data: data)
                    }
                }
            }).resume()
        }
    }
}

2 个答案:

答案 0 :(得分:0)

为什么不使用内置的下载机制,它始终在主线程上提供回调*:

let image: UIImage!
let ref = FIRStorage.storage().reference(forURL: Dataservice.dataService.USERS_REF_CURRENT_PROFILE_IMAGE)
ref.data(withMaxSize: 1 * 1024 * 1024) { data, error in
  if let error = error {
    // Uh-oh, an error occurred!
  } else {
    // Data for your profile image is returned
    image = UIImage(data: data!)
  }
}

*除非您通过提供自己的队列明确更改线程;)

答案 1 :(得分:-3)

执行异步后,需要返回主线程来设置下载图像

DispatchQueue.main.async {
  DispatchQueue.main.sync {
    self.profilePhoto.image = UIImage(data: data)
  }
}