线程跳过数据库DataSnapshot(FireBase)

时间:2019-01-12 12:24:06

标签: swift database multithreading firebase uitableview

我试图从数据库中追加到数组“帖子”中,但是看起来主线程跳过了我的指令,直接跳到numberOfRowsInSection并崩溃,因为数组为零!

  

线程1:致命错误:展开包装时意外发现nil   可选值

任何想法如何强制线程首先执行我对数组指令的追加?

代码如下:

var pods: [Pod]!

override func viewDidLoad() {
    super.viewDidLoad()

    loadPosts()
}

func loadPosts() {
   Database.database().reference().child("Posts").observe(.childAdded) { (DataSnapshot) in
        if let dict = DataSnapshot.value as? [String: Any] {
            let title = dict["title"] as! String
            let description = dict["description"] as! String
            let imageURL = dict["image"] as! String
            let pod = Pod(image: imageURL, title: title, description: description)
            self.pods.append(pod)
            self.tableView.reloadData()
        }
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return pods.count
}

1 个答案:

答案 0 :(得分:0)

您当前的数据源数组将始终为nil,因为您从未分配它。

因此,将您的数据源数组创建为Pod个对象的空数组

var pods = [Pod]()