2017-01-18 22 views
0

Ich folgte einem Tutorial, um Image URLs zu laden und sie an ein Array anzuhängen, um Benutzerprofilbilder in einem UITableView von Zellen für jeden Benutzer unter Verwendung des folgenden Codeblocks anzuzeigen:Firebase Swift 3 Laden von Profilbildern in TableView mit 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() 

Aber aus irgendeinem Grund „NSURLSession“ nicht als Vorschlag angezeigt, während ich die Programmierung und es gibt Fehler, so änderte ich das alles von „NSURL ...“ einfach „URL ...“:

Aber jedes Mal, wenn ich das laufe, bekomme ich ein Null für Daten, ein d es wird nie an mein Array angehängt. Kann mir jemand erklären, was ich vermisse? Dies ist mein erster Versuch mit Firebase.

+0

warum fügen Sie Daten NSArray es schlechte Praxis –

+0

@kirtimali was würden Sie vorschlagen? – 1QuickQuestion

+0

überprüfen Sie diese http://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swift –

Antwort

0

Ich fand tatsächlich, was das Problem war, und ich wollte nicht einfach den Beitrag löschen, falls jemand anders nach einer Lösung für das gleiche Problem suchen sollte. Es stellt sich heraus, URLSession funktioniert gut, so dass "NSURLSession" nicht zu finden war kein Problem. Sobald ich das funktionierte, wurde das Profilbild jedoch nur geladen, nachdem ich mein uitableview neu geladen hatte. Sobald ich meine tableview.reload bewegen() es funktionierte konsequent, und hier ist mein Arbeits Code für 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 
      } 
     } 
    }) 
}