2017-01-18 13 views
0

다음 이미지 블록을 사용하여 이미지 URL을로드하고 배열에 추가하여 각 사용자의 UITableView 셀에 사용자 프로필 이미지를 표시하는 자습서를 진행했습니다 :Firebase Swift 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 ..."단순히 "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 

하지만이 작업을 실행할 때마다 데이터에 대해 nil을 얻습니다. 그것은 결코 내 배열에 추가되지 않는다. 누군가 내가 누락 된 것을 설명 할 수 있습니까? 이것은 Firebase의 첫 시도입니다.

+0

왜 당신이 데이터를 추가하는 나쁜 관행 –

+0

당신이 제안 무엇 @kirtimali되어있는 NSArray하는? – 1QuickQuestion

+0

확인하기 http://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swift –

답변

0

실제로 문제가 무엇인지 알았지 만 다른 사람이 같은 문제에 대한 해결책을 찾고있는 경우 게시물을 삭제하고 싶지 않았습니다. URLSession이 제대로 작동하므로 "NSURLSession"을 찾지 못하는 것이 문제가되지 않습니다. 그러나 일단 프로파일 이미지가 내 uitableview를 다시로드 한 후에 만로드됩니다. 나는()가 지속적으로 일했으며, 여기 스위프트 3 내 작업 코드 내 tableview.reload를 이동하면 :

//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 
      } 
     } 
    }) 
} 
관련 문제