Swift:没有退出Firebase观察功能块

时间:2016-10-25 04:19:40

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

不从观察区块退出。

不打印hello或事件。

坚持从数据库中取货。

显示Firebase中的数据,但不在块外。

例如:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let databaseRef = FIRDatabase.database().reference()
    databaseRef.child("Events").queryOrderedByKey().observe(.childAdded, with: {
        snapshot in
        print(snapshot)
        var temp : event = event()
        temp.name = (snapshot.value as? NSDictionary)?["name"] as? String ?? ""
        temp.description = (snapshot.value as? NSDictionary)?["description"] as? String ?? ""
        temp.date = (snapshot.value as? NSDictionary)?["date"] as? String ?? ""
        temp.price = (snapshot.value as? NSDictionary)?["price"] as? String ?? ""
        temp.venue = (snapshot.value as? NSDictionary)?["venue"] as? String ?? ""
        temp.genre1 = (snapshot.value as? NSDictionary)?["genre1"] as? String ?? ""
        temp.genre2 = (snapshot.value as? NSDictionary)?["genre2"] as? String ?? ""
        temp.img = (snapshot.value as? NSDictionary)?["img"] as? String ?? ""

        self.events.append(temp)
        print(self.events)
    })
    print("Hello")
    print(self.events)
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

这里几件事: -

  • 您正在使用 childAdded 作为 FIRDataEventType ,只有在事件时才会触发此查询节点将获得附加值。如果要访问数据库节点中的当前数据,请使用 value

    databaseRef.child("Events").queryOrderedByKey().observe(.value, with: {
    
  • print(self.events) 之外的
  • completionBlock:语句将无效,因为对firebase数据库的make是异步的,但只有completionBlock中的print(self.events)语句只会起作用。

  • 如果案件是你的viewDidLoad未被调用,那么当时你可能不在右侧的viewController上。