【发布时间】:2017-09-22 02:40:41
【问题描述】:
我有两个观察者,第二个观察者依赖于第一个观察者的值。我似乎无法让第一个观察者工作,我在 Xcode 上没有收到任何错误。第一个功能必须检查用户配置文件中的信息,然后使用该信息在数据库中搜索不同的信息。这是我的代码:
func loadposts() {
ref = Database.database().reference()
let trace = Performance.startTrace(name: "test trace")
trace?.incrementCounter(named:"retry")
let userID = Auth.auth().currentUser?.uid
print(userID!)
ref.child("Users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let one1 = value?["Coupon Book"] as? String ?? ""
print("one1: \(one1)")
self.bogus.set(one1, forKey: "bogus")
}) { (error) in
print(error.localizedDescription)
}
delay(0.1) {
print("bogus: \(self.bogus.string(forKey: "bogus"))")
Database.database().reference().child("Coupons").child(self.bogus.string(forKey: "bogus")!).observe(.childAdded) { (Snapshot : DataSnapshot) in
if let dict = Snapshot.value as? [String: Any] {
let captiontext = dict["company name"] as! String
let offerx = dict["offer count"] as! String
let logocomp = dict["logo"] as! String
let actchild = dict["childx"] as! String
let post = Post(captiontext: captiontext, PhotUrlString: actchild, offertext: offerx, actualphoto: logocomp)
self.posts.append(post)
self.tableview.reloadData()
print(self.posts)
}
}
}
trace?.stop()
}
感谢任何帮助。
【问题讨论】:
-
此语句是否打印任何内容
print("bogus: \(self.bogus.string(forKey: "bogus"))")? -
@3stud1ant3 不,它是 nil
-
它是 nil 因为
observeSingleEvent是一个async方法,所以要获得所需的结果,您需要在第一个观察者中调用第二个观察者,或者您可以使用完成处理程序
标签: swift firebase firebase-realtime-database