2017-01-18 38 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() 

しかし、私はプログラミングをしていますし、それがエラーを返すので、私からすべてを変えながら、「NSURL ...」単純に「NSURLSessionは」「URL ...」の提案として表示されません何らかの理由:

   //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 
      } 
     } 
    }) 
} 
関連する問題