【问题标题】:Why is my array not storing values which i retrieve from my firebase data base?为什么我的数组不存储我从 Firebase 数据库中检索到的值?
【发布时间】:2017-05-05 10:55:40
【问题描述】:

所以我在类级别声明我的用户数组,这非常好,并存储我放入其中的任何值,除非我从我的 firebase 数据库中检索它......我一直在努力解决这个问题,这是我能做的唯一错误似乎链接到这个是可能的。

由于模拟器错误,退回到从 NSUserDefaults 加载访问令牌

由于某种奇怪的原因,我的数组一直告诉我它是空的......

我该如何解决这个问题?

var allUsers = [User]()

func retrieveUsers() {
    let ref = FIRDatabase.database().reference()
    ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in

        let users = snapshot.value as! [String : AnyObject]
        self.allUsers.removeAll()
        for (_, value) in users {

            if let uid = value["uid"] as? String {
                if uid != FIRAuth.auth()!.currentUser!.uid {
                    if let name = value["name"] as? String, let age = value["birthdate"] as? String {
                        let calculatedAge = self.calcAge(birthdate: age)

                        let userToShow = User(name: name,age: calculatedAge)
                        print(userToShow.Name)
                        self.allUsers.append(userToShow)

                    }

                    }
                }
            }
        })
    print(allUsers.count)
    ref.removeAllObservers()


}

提前致谢!!

【问题讨论】:

  • observeSingleEvent 异步工作。将print 行放在完成块中。

标签: ios arrays swift firebase


【解决方案1】:

异步数据检索 :-) 你看到“userToShow.Name”打印出来了吗?您在数据检索完成之前打印计数 - 尝试将其放入完成处理程序中

【讨论】:

  • 我记得当我在完成处理程序中打印它时它可以工作,但这是否意味着我必须在完成处理程序中调用依赖这个数组的所有方法,或者我必须创建一个方法完成检索所有数据时通知我?当我在 viewDIdLoad 中调用另一个方法时,它也返回 nil ...感谢您的帮助!
  • 您需要从完成处理程序触发所有后续操作 - 您可以调用 tableView.reloadData(),或调用 MyClass.doNextThing()
  • 成功了!非常感谢您花时间回答我的问题,非常感谢! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多