2016-11-20 5 views
0

私はとても新しいです。 Firebaseデータベースのデータをコレクションビューに取り込もうとしています。 FirebaseからデータをフェッチするUsers varは、すべてのデータで正しく復帰します。なぜ私はUICollectionViewNilに戻ってくるのか理解しようとしています。UICollectionViewをFirebaseに接続する

self.usersCollectionView.reloadData() 

とエラーがある:nilを返します

fatal error: unexpectedly found nil while unwrapping an Optional value

その私のcollectionView VAR私はクラッシュがこのラインで起こると思います。

セルにセルクラスを接続しました。

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 
    } 

    */ 

} 

これは私のUser VARです:あなたはより多くの情報が必要な場合が私のコードについての質問である場合や、

import UIKit 

class User: NSObject { 

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

} 

。お気軽にお尋ねください。

+0

FIRDataEventType.childAddedをFIRDataEventType.valueに変更したときに何が起こるかを確認できますか? –

+0

ありがとうジョーディ。私のコードは実際に動作します。その私のUICollectionView does notは、セルに詳細を表示します。申し訳ありませんが、私はそれが動作していないデータベースへの接続だと思った。私は印刷物(ユーザー)を行い、それをコンソールに印刷しました。 –

+0

collectionViewが正しく作成されていないようです。あなたはストーリーボードでどのように接続しましたか? –

答えて

0

collectionViewが正しく作成されていないようです。あなたはストーリーボードでどのように接続しましたか?

適切に設定される前に、collectionViewを再読み込みしようとしています。

+0

私も新しく、ストーリーボードでどのように接続していますか? –

関連する問題