Swift:不退出 Firebase 观察功能块 [重复]

Posted

技术标签:

【中文标题】Swift:不退出 Firebase 观察功能块 [重复]【英文标题】:Swift : not exiting Firebase observe fuction block [duplicate] 【发布时间】:2016-10-25 04:19:40 【问题描述】:

不退出观察块。

不打印 hello 或 events。

卡在从数据库中获取。

显示来自 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)

提前致谢!

【问题讨论】:

见***.com/questions/39067196/… 【参考方案1】:

这里有几件事:-

您正在使用 childAdded 作为 FIRDataEventType,并且仅当您的 Events 节点获得值时才会触发此查询附加。如果您想访问数据库节点中的当前数据,请使用 value

databaseRef.child("Events").queryOrderedByKey().observe(.value, with: 

print(self.events)completionBlock: 之外的语句将不起作用,因为对 firebase 数据库的制作是异步的,但只有在 completionBlock 中的 print(self.events) 语句才会起作用。

如果您的 viewDidLoad 没有被调用,那么您当时可能不在正确的 viewController 上。

【讨论】:

以上是关于Swift:不退出 Firebase 观察功能块 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 观察数据更新 UI (Swift)

Swift -Firebase 可以同时发布和观察

Swift,FIrebase - 无法通过 removeAllObservers 删除观察者

Swift Firebase观察.childAdded对现有项目而不是新项目的反应

Swift:如果孩子的观察者被移除,则不会调用 Firebase 身份验证观察者

Swift 中的完成处理程序 Firebase 观察者