2016-11-20 7 views
0

Ich bin ziemlich neu in SO. Ich versuche, eine Sammlungsansicht mit Daten aus einer Firebase-Datenbank zu füllen. Die Users-Variable, die Daten von Firebase abruft, kommt mit allen Daten zurück. Was ich versuche herauszufinden, warum meine UICollectionView mit Nil zurückkommt. Ich denke, dass der Absturz in dieser Zeile passiert:Verbinden von UICollectionView mit Firebase

self.usersCollectionView.reloadData() 

und der Fehler ist:

fatal error: unexpectedly found nil while unwrapping an Optional value

Its my collectionView var, die eine nil ist zurück.

Ich habe die Zellklasse mit der Zelle verbunden.

import UIKit 
import Firebase 

class UserCollectionController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    var cellIdentifier = "User Cell" 

    var users = [User]() 

    @IBOutlet weak var usersCollectionView: UICollectionView! 

    func createAlert(title: String, message: String) { 

     let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) 

     alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: { (action) in 

      self.dismiss(animated: true, completion: nil) 

     })) 

     self.present(alert, animated: true, completion: nil) 

    } 

    func fetchUser() { 

     FIRDatabase.database().reference().child("users").observe(FIRDataEventType.childAdded, with: { (snapshot) in 

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

       let user = User() 

       user.name = dictionary["name"] as! String? 
       user.profileImageURL = dictionary["profileImageURL"] as! String? 

       self.users.append(user) 

       DispatchQueue.main.async(execute: { 

        self.usersCollectionView.reloadData() 

       }) 


      } 

      print(snapshot) 

     }, withCancel: nil) 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     fetchUser() 

    } 


    public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return users.count 
    } 

    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! UserCollectionViewCell 

     let cellUsers = users[indexPath.item] 

     //cell.users = users[indexPath.item] 

     cell.usersNameLabel.text = cellUsers.name 

     if let profileImageURL = cellUsers.profileImageURL { 


      cell.usersImageView.loadImageUsingCacheWithUrlString(urlString: profileImageURL) 
     } 

     return cell 
    } 


    public func numberOfSections(in collectionView: UICollectionView) -> Int 
    { 
     return 1 
    } 
} 

class UserCollectionViewCell: UICollectionViewCell { 

    @IBOutlet weak var usersImageView: UIImageView! 

    @IBOutlet weak var usersNameLabel: UILabel! 
    /* 
    // MARK: - Public API 
    var users: User! { 

     didSet { 

      updateUI() 

     } 

    } 

    // MARK: - Private 

    //@IBOutlet weak var featuredImageView: UIImageView! 
    //@IBOutlet weak var interestTitleLabel: UILabel! 

    func updateUI() { 

     if let profileImage = users.profileImageURL { 

      self.usersImageView?.loadImageUsingCacheWithUrlString(urlString: profileImage) 

     } 

     usersNameLabel?.text! = users.name! 

    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     self.layer.cornerRadius = 10.0 
     self.clipsToBounds = true 
    } 

    */ 

} 

Das ist mein User var:

import UIKit 

class User: NSObject { 

    var name: String? 
    var email: String? 
    var password: String? 
    var profileImageURL: String? 

} 

Wenn es irgendwelche Fragen zu meinem Code ist oder wenn Sie weitere Informationen benötigen. Bitte zögern Sie nicht zu fragen.

+0

Können Sie versuchen zu sehen, was passiert, wenn Sie FIRDataEventType.childAdded zu FIRDataEventType.value ändern? –

+0

Danke Jordi. Mein Code funktioniert tatsächlich. Es ist meine UICollectionView, die nicht die Zellen mit den Details zeigt. Entschuldigung, ich dachte, es war die Verbindung zur Datenbank, die nicht funktionierte. Ich habe einen Druck (Benutzer) gemacht und es hat die Benutzer auf der Konsole gedruckt. –

+0

Es scheint, dass Ihre CollectionView nicht ordnungsgemäß erstellt wurde. Wie hast du es im Storyboard verbunden? –

Antwort

0

Es scheint, als ob Ihre CollectionView nicht ordnungsgemäß erstellt wurde. Wie hast du es im Storyboard verbunden?

Sie versuchen, die CollectionView neu zu laden, bevor sie ordnungsgemäß eingerichtet wurde.

+0

Ich bin auch neu, wie verbindet man es im Storyboard? –

Verwandte Themen