2017-01-12 82 views
0

由於某種原因,我的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() 
     } 
    } 
} 
+0

ç你請張貼日誌。 (也可以在空的錯誤情況下打印)。 – shallowThought

回答

-3

執行異步之後,你需要回到主線程設置下載圖像

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

OP已經在使用'DispatchQueue.main.async'來更新主線程上的UI。 –

+0

所以我需要調用它兩次?在這兩個線程 –

+0

沒有做任何事情,但沒有崩潰我的程序@rudydydy –

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!) 
    } 
} 

*除非你明確地提供自己的隊列更改線程;)

+0

我試過這個概念,但仍然得到圖像加載不一致。發生了什麼是我打印出圖像設置之前返回權利,但有時不設置我的猜測是它之間我打電話給我的方法或線程。 –

相關問題