2017-01-18 3 views
0

Я следил за учебным пособием по загрузке URL-адреса изображений и добавлению их в массив для отображения изображений профиля пользователя в UITableView ячеек для каждого пользователя, используя следующий блок кода:Firebase Swift 3 Загрузка изображений профиля в TableView с NSURLSession

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 

Но каждый раз, когда я запускаю это, я получаю нуль для данных, d он никогда не присоединяется к моему массиву. Может ли кто-нибудь объяснить, что мне не хватает? Это моя первая попытка с 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() она работала стабильно, а вот мой рабочий код для Swift 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 
      } 
     } 
    }) 
}