2016-05-20 8 views
7

ファイヤーベースストレージ内の画像へのリンクを含むファイヤーベースリアルタイムデータベースからのデータをテーブルビューに取り込む、新しいファイヤーベースプロジェクトを再作成しようとしています。コレクションビューにファイヤーベースデータを設定する

私は、火災ベースのデータを持つテーブルビューであるチュートリアルプロジェクトを作成できます。しかし、私の現在のプロジェクトでは、エクステンション内のコレクションビューです。

は、私は私の変数私はその後、呼び出し、私はfirebase

から取得する私のデータの配列であると考え

var ref: FIRDatabaseReference! 
    var messages: [FIRDataSnapshot]! = [] 
    var msglength: NSNumber = 10 
    private var _refHandle: FIRDatabaseHandle! 
特に

var messages: [FIRDataSnapshot]! = [] 

に問題を絞り込むました関数は、私のviewdidload()に配列を移入する必要があります

func loadPosts(){ 
    self.messages.removeAll() 
    // Listen for new messages in the Firebase database 
    _refHandle = self.ref.child("messages").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in 
     //print("1") 
     self.messages.append(snapshot) 
     //print(self.messages.count) 
    }) 
} 

エクステンションを使用する横スクロールが必要なので、コレクションビューを作成しようとすると問題が発生します。私の値の配列は常に0ですが、私のloadPosts()関数では、私の配列の数はfirebaseにある投稿の量と同じです。

extension HomeViewController : UICollectionViewDataSource 
{ 

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return 1 
} 

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

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    print(messages.count) 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(StoryBoard.CellIdentifier, forIndexPath: indexPath) as! InterestCollectionViewCell 

    // Unpack message from Firebase DataSnapshot 
    let messageSnapshot: FIRDataSnapshot! = self.messages[indexPath.row] 
    let message = messageSnapshot.value as! Dictionary<String, String> 
    let name = message[Constants.MessageFields.name] as String! 
    if let imageUrl = message[Constants.MessageFields.imageUrl] { 
     if imageUrl.hasPrefix("gs://") { 
      FIRStorage.storage().referenceForURL(imageUrl).dataWithMaxSize(INT64_MAX){ (data, error) in 
       if let error = error { 
        print("Error downloading: \(error)") 
        return 
       } 
       cell.featuredImageView?.image = UIImage.init(data: data!) 
      } 
     } else if let url = NSURL(string:imageUrl), data = NSData(contentsOfURL: url) { 
      cell.featuredImageView?.image = UIImage.init(data: data) 
     } 
     cell.interestTitleLabel?.text = "sent by: \(name)" 
    } 
     return cell 
    } 
} 

私はFIRDataSnapshotを使用することではないでしょうか?もしそうなら、どちらを使うのが正しいですか?あるいは、私は拡張を使わない別の形でプロジェクトにアプローチすべきですか?

+0

オブジェクトを配列に挿入したら、collectionViewでreloadData()を呼び出していますか? –

+0

ああ、私はそうではありませんでした。すべてがちょうど満員になった!ありがとうございました! @MacBellingrath – Mark

+0

素晴らしい!私は答えを投稿するつもりです。 –

答えて

6

完成ブロック内の配列にアイテムを正しく挿入していますが、コレクションビューを再ロードする呼び出しがありません。

関連する問題