2017-01-18 21 views
0

我按照教程加載圖像URL並將它們附加到數組,以便使用以下代碼塊在每個用戶的單元格的UITableView中顯示用戶配置文件圖像:Firebase Swift 3使用NSURLSession將配置文件圖像加載到TableView中

let url = NSURL(string: urlString) 
     NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) in 

     //download hit an error so lets return out 
     if error != nil { 
      print(error) 
      return 
     } 

     dispatch_async(dispatch_get_main_queue(), { 
      //"profilePics" is my array of UIImages made as a global var 
      self.profileImages.append(UIImage[data!]) 
     }) 

    }).resume() 

但出於某種原因「NSURLSession」,而我編程並返回錯誤,所以我從改變了一切不顯示爲一個建議「NSURL ......」簡單的「網址...」:

   //Grabbing images from db 
       print("starting get image block : ") 
        let url = URL(string: profileImageURL) 
        URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in 
         print("grabbing image: ")  //Test line for monitor 
         print(String(describing: data)) //Test line for monitor : returns "nil" 
         if error != nil{ 
          print(error!) 
          return 
         } 

         DispatchQueue.main.async { 
          //"profilePics" is my array of UIImages made as a global var 
          self.profilePics.append(UIImage(data: data!)) 
          print("Image appended") 
         } 

       }).resume() 

       // grabbing images from db end 

但每次我運行這個我得到一個零數據,一個它永遠不會附加到我的數組。有人可以解釋我缺少的東西嗎?這是我第一次嘗試使用Firebase。

+0

你爲什麼要添加數據的NSArray它是不好的做法 –

+0

@kirtimali你會建議? – 1QuickQuestion

+0

檢查此問題http://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swift –

回答

0

我確實發現問題所在,我不想在別人可能正在尋找相同問題的解決方案時刪除帖子。原來,URLSession工作正常,所以沒有找到「NSURLSession」不是問題。但是,一旦我得到這個工作,配置文件圖像只會在重新加載我的uitableview後才加載。有一次,我將我的tableview.reload(),它的工作持之以恆,這裏是斯威夫特3我的工作代碼:

//This method grabs all user data for each user & adds them to an 
//array to be displayed in a uitableview 
func getUsersData(){ 
    FIRDatabase.database().reference().child("users").observe(.childAdded, with: {(snapshot) in 

     if let dictionary = snapshot.value as? [String:AnyObject]{ 

      print(snapshot.childrenCount) 

      if (snapshot.childrenCount > 2) { 

       self.users.append(dictionary["name"] as! String) 

       if !(dictionary["subjects"]?.isEqual(""))!{ 

        self.subjects.append(dictionary["subjects"] as! String) 

       } 

       else{ 

        self.subjects.append("N/A") 

       } 

       if !(dictionary["location"]?.isEqual(nil))!{ 

        self.states.append(dictionary["location"] as! String) 

       } 

       else{ 

        self.states.append("N/A") 

       } 

       self.ratings.append("4.1") 
       if let profileImageURL = dictionary["userPhoto"] { 

        let url = URL(string: profileImageURL as! String) 
        URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in 

         if error != nil{ 

          print(error!) 
          return 

         } 

         DispatchQueue.main.async { 

          self.profilePics.append(UIImage(data: data!)) 
          print("Image appended") 

         } 

         // This line is required to reload with new data in tableview array data from db 

         DispatchQueue.main.async{ 

          self.browseUITableView.reloadData() 

         } 

        }).resume() 

       } 
       // grabbing images from db end 
      } 
     } 
    }) 
} 
相關問題