2016-09-23 10 views
2

FirebaseUIを使用している間、私はfirebaseから自分のデータのカスタムセルを実装しようとしています。FirebaseUI:致命的なエラー:オプション値をアンラッピングしている間に予期せぬ発見nilストーリーボードとUIラベルの使用

import UIKit 
import Firebase 
import FirebaseDatabaseUI 
private let reuseIdentifier = "Cell" 

class ShowDogsCollectionViewController: UICollectionViewController { 

let firebaseRef = FIRDatabase.database().reference().child("dogs") 
var dataSource: FirebaseCollectionViewDataSource! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.dataSource = FirebaseCollectionViewDataSource(ref: self.firebaseRef, cellClass: DogCollectionViewCell.self, cellReuseIdentifier: reuseIdentifier, view: self.collectionView!) 

    self.dataSource.populateCell { (cell: UICollectionViewCell, obj: NSObject) -> Void in 
     let snap = obj as! FIRDataSnapshot 
     let dogCell = cell as! DogCollectionViewCell 

     dogCell.backgroundColor = UIColor.green 
     print(snap.childSnapshot(forPath: "name")) 

     // The line below should set the label text for one of the labels on our custom UICollectionCell Class, however it unwraps to nil. 
     // fatal error: unexpectedly found nil while unwrapping an Optional value 
     // dogCell.dogAge.text = "woot" 

    } 
    self.collectionView?.dataSource = self.dataSource 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

そして、これは私のカスタムセルクラスである:ここで

enter image description here

私のコレクションビューコントローラは次のようになります。私はそうは次のように細胞内のいくつかのカスタムラベルを持っていると思います。リアルシンプル。

import UIKit 

class DogCollectionViewCell: UICollectionViewCell { 

    @IBOutlet weak var dogName: UILabel! 
    @IBOutlet weak var dogAge: UILabel! 
    @IBOutlet weak var dogToy: UILabel! 

} 

私はここにgithubの上のコードを掲載している:

https://github.com/thexande/firebaseCustomUICollectionViewCellDemo

としてだけでなく、ここでの問題を記述したビデオを:

私は応答を通じて選んだ

https://youtu.be/q_m-bgofOb4

この質問には、すべてのXIBとストーリーボードが関与しているようです。ストーリーボードではこれはできないのですか?

ありがとうございました!

答えて

1

大丈夫です。だからしばらく試してみたが、私はそれを理解した。

あなたはprototypeReuseIdentifierself.dataSource = FirebaseCollectionViewDataSource(ref: self.firebaseRef, prototypeReuseIdentifier: reuseIdentifier, view: self.collectionView!)

ずつデータソースを設定する必要があります。それ以外の場合はDogCollectionViewCellを使用せず、ラベル要素を持たないUICollectionViewCellの新しいインスタンスを作成します。そのため、.textプロパティを設定しようとすると無限になってしまいます。

あなたのコードで年齢を設定することができますdogCell.dogAge.text = "woot"

let nameSnap = snap.childSnapshot(forPath: "name")    
dogCell.dogName.text = nameSnap.value! as? String 

enter image description here

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.dataSource = FirebaseCollectionViewDataSource(ref: self.firebaseRef, prototypeReuseIdentifier: reuseIdentifier, view: self.collectionView!) 

    self.dataSource.populateCell { (cell: UICollectionViewCell, obj: NSObject) -> Void in 
     let snap = obj as! FIRDataSnapshot 
     let dogCell = cell as! DogCollectionViewCell 
     dogCell.backgroundColor = UIColor.green 

     dogCell.dogAge.text = "woot" 

    } 
    self.collectionView?.dataSource = self.dataSource 
} 

enter image description here

スナップの値を取得するには
関連する問題