无法从快照中获取子项数

时间:2016-11-14 14:00:24

标签: firebase firebase-realtime-database swift3

我无法获得快照返回的孩子数量。当我在另一个位置写Snap ((null)) (null)时,我总是得到print(self.newCars)

class NewCarsViewController: UICollectionViewController {
    var firebase: FIRDatabaseReference?

    var newCars = FIRDataSnapshot()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.firebase = FIRDatabase.database().reference(fromURL:"https://firebaseURL/").child("featuredCars")
        firebase?.observeSingleEvent(of: .value, with: { snapshot in
            self.newCars = snapshot
            print("halim")
            print(self.newCars)
            //  print(snapshot.childrenCount) // I got the expected number of items
            for rest in snapshot.children.allObjects as! [FIRDataSnapshot] {
               //   print(rest.value ?? "")
            }
        })

    }

    override func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 1
    }
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "NewCarCell", for: indexPath) as UICollectionViewCell
        return cell
            }

}

1 个答案:

答案 0 :(得分:0)

该代码对我有用。

我猜你会在Firebase块(闭包)之外移动print(self.newCars)。

Firebase需要时间来返回数据,并且该数据仅在闭包内变为有效。

如果print语句在闭包之外,它将在从Firebase返回数据之前运行,并且它将为null。