ios - Swift 3 numberOfRows TableView 函数错误

标签 ios swift xcode tableview

我目前在尝试使用一个值作为 TableView 的 numberOfRows 函数的返回值时遇到问题。在我的 viewDidLoad 中,我有下面的代码,它打印了我需要的值,但是当我尝试返回相同的变量时,它说在展开值时发现 nil。有什么建议吗?

let prevOrderRef = ref?.child("Users").child(currentUserID!).child("Previous Orders")

    prevOrderRef?.observeSingleEvent(of: .value, with: { (snapshot) in

        let dict = PreviousOrders(snapshot: snapshot)
        self.prevOrderCount = dict.prevOrdersDict?.count
        print(self.prevOrderCount!)

    })

更新:

func tableView(_ tableView: UITableView, numberOfRowsInSection section:            Int) -> Int {
    if tableView == self.currentOrderTblView {

        return 1
    } else {

        let prevOrderRef = ref?.child("Users").child(currentUserID!).child("Previous Orders")

        prevOrderRef?.observeSingleEvent(of: .value, with: { (snapshot) in


            let dict = PreviousOrders(snapshot: snapshot)
            self.prevOrderCount = dict.prevOrdersDict?.count
            print(self.prevOrderCount!)



        })

        return 2
    }


}

我已将 firebase 数据库数据观察移动到 numberOfRows 中。 这会打印所需的值,但我仍然无法将其用作返回值。

最佳答案

我认为问题在于您正在尝试访问远程数据库,这很可能是异步调用,因此您目前没有值 numberOfRowsInsection 被命中。

编辑

最简单的方法是对self.prevOrderDict 使用didSet。这样您就可以确切地知道何时将值分配给 Dict。

最初,您可以检查是否 self.prevOrderDict != nil,如果是,则使用计数作为返回值,否则返回 0。这将为您提供一个空表。一旦 didSet 被命中,您就可以使用 tableView.reloadData()

var prevOrderDict = [] {
     didSet {
     tableView.reloadData()
 }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     if self.prevOrderDict != nil {
          return self.prevOrderDict.count 
     } else {
          return 0 
     }

关于ios - Swift 3 numberOfRows TableView 函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43254312/

相关文章:

xcode - 字典可选?快速困惑

c++ - LinkedList在C++中只添加两个元素

ios - 枚举 XML 提要中的项目

ios - 使 UISearchBar 不像在联系人应用程序中那样滚动

swift - 代码生成按钮的 if 语句,Swift

ios - 上传到 App Store 时不支持的架构

Xcode链接错误: file too small for architecture armv7

ios - SpriteKit 和 UIKit 兼容性 : OpenGL error when migrating to Swift 2?

ios - Google FCM 是否支持基于 HTTP 2 的 Apple APNs API?

ios - 未安装应用程序时,Firebase Dynamic链接打开Weblink而不是App Store