【问题标题】:Get results from Firebase dictionary?从 Firebase 字典中获取结果?
【发布时间】:2016-10-18 17:11:09
【问题描述】:

我能够从 Firebase 查询中检索结果,但我无法将它们作为字典检索以填充 tableView。以下是我存储查询结果的方式:

var invites: Array<FIRDataSnapshot> = []
func getAlerts(){

        let invitesRef = self.rootRef.child("invites")
        let query = invitesRef.queryOrderedByChild("invitee").queryEqualToValue(currentUser?.uid)
        query.observeEventType(.Value, withBlock: { snapshot in

            self.invites.append(snapshot)
            print(self.invites)

            self.tableView.reloadData()
        })
    }

打印 self.invites 会返回以下内容:

[Snap (invites) {
    "-KKQWErkyuehmbxom8NO" =     {
        invitedBy = T2k7Bm9G9RNLcHLvLlKApRbnas23;
        invitee = dRJ1FqctSfTlLF8iO2ddlc9BANJ3;
        role = guardian;
    };
}]

我在填充 tableView 时遇到问题。单元格标签不显示任何内容:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    let inviteDict = invites[indexPath.row].value as! [String : AnyObject]
    let role = inviteDict["role"] as? String

    cell.textLabel!.text = role

    return cell
} 

有什么想法吗?

谢谢!

编辑:在我的函数运行后将字典打印到控制台,它正在打印[]。为什么它失去了它的价值?

override func viewWillAppear(animated: Bool) {
        getAlerts() // inside of function prints values
        print(self.invites) //prints []
    }

编辑 2:Paul 的解决方案奏效了!!我添加了以下功能让 Firebase “监听”结果!我可能需要编辑它以仅显示登录用户的警报,但这至少为我指明了正确的方向:

  override func viewWillAppear(animated: Bool) {
        getAlerts()

        configureDatabase()
    }

    func configureDatabase() {

        // Listen for new messages in the Firebase database
        let ref = self.rootRef.child("invites").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
            self.invites.append(snapshot)
            self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.invites.count-1, inSection: 0)], withRowAnimation: .Automatic)
        })
    }

【问题讨论】:

  • 您应该检查字典在您的 getAlerts 函数之外的查询后是否返回 nil。我一直有同样的问题。该值存储在函数中,但是一旦我离开它,该值将返回 nil
  • 感谢您的回复。我想你在做某事!我刚刚更新了我的问题。我在控制台运行后将字典打印到控制台,现在它正在打印[]。到底他妈发生了什么?我该如何解决这个问题?
  • 我已经尝试自己解决这个问题大约两天了。我将密切关注这个线程。希望有人会提出解决方案。与此同时,您可以尝试使用属性观察器。它会告诉你你的字典在哪里被设置为零。我自己今天才知道的。
  • @TaylorSimpson 查看解决方案!像魅力一样工作

标签: ios swift uitableview firebase firebase-realtime-database


【解决方案1】:

查看friendlychat Firebase codelab 以获取从异步调用填充表视图的示例。具体见FCViewController.swift中的viewDidLoad和configureDatabase。

【讨论】:

  • 成功了!谢谢!我用有效的解决方案更新了我的问题。
【解决方案2】:

您的数组将始终返回 [ ],因为 Firebase 是异步的。如果您在 Firebase 闭包内添加 var invites: Array&lt;FIRDataSnapshot&gt; = [],您将打印您正在寻找的数据,但我假设您想在闭包之外使用该变量。为了完成,您必须在 getAlerts() 函数中创建一个完成。如果您不确定如何完成,请进行谷歌搜索,这将解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多