首页 > 解决方案 > Firebase Firestore 文档计数返回为零值

问题描述

我正在使用 Firebase Firestore 开发一个 iOS 应用程序。但是,我遇到了一个问题,当我返回文档计数值时,它总是为零。如果我执行打印方法,它会打印集合中的项目

    // Variable
    var itemsInttt: Int

    
    // Collectionsview
         func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                dataBase.collection("Channels").getDocuments { (document, error) in
                    self.itemsInttt = (document?.documents.count)!
// The print works
                    print((document?.documents.count)!)
                    self.itemsInttt = documentData!.count
                }
// This is where it crashes
                return itemsInttt
            }

这是完整的viewcontroller.swift文件

https://github.com/Ashwin-Paudel/stackoverflowviewcontroller/blob/main/ViewController.swift

代码有点乱

你能告诉我我错在哪里,甚至提供示例代码吗

谢谢!

标签: swiftfirebasegoogle-cloud-firestoreuicollectionview

解决方案


我的建议:

  1. 不要将异步方法输入到集合视图的委托中;给它一个数组计数,如someArray.count.
  2. 在使用您的getDocuments方法重新加载集合视图之前填充该数组。当 Firestore 返回并且您已填充该数组时,请重新加载集合视图。委托方法将使用该数组的大小来确定要呈现多少个单元格。
  3. 始终从 Firestore 安全地解包快照,切勿强制解包它们,尤其是当您甚至没有检查错误时。
  4. 了解异步函数及其工作原理;当你这样做时,事情会变得更有意义。请记住,在numberOfItemsInSection加载视图控制器时会立即调用委托方法,因此在其中放置异步方法是没有用的,因为调用 Firestore 并获得响应需要时间。

推荐阅读