每次在我的iOS应用程序中使用Firebase ChildAdded

时间:2016-08-02 08:55:14

标签: ios firebase firebase-realtime-database

我有一个简单的iOS应用,可以与我的Firebase同步1,000个联系人。我的AppDelegate中persistenceEnabled设置为true。

在我的UITableViewController中,我观察ChildAdded事件,下载联系人,这样可以正常工作。

问题在于 - 下次打开应用程序时,导航回UITableViewController,再次触发ChildAdded事件并加载1,000个联系人。

我认为会发生的事情是,在后续发布时,由于persistenceEnabled为true且没有添加新的子项,因此不会触发ChildAdded事件。

我是否误解了Firebase的工作原理?

ref.child("contacts").observeEventType(.ChildAdded, withBlock: { snapshot in

    if let json = snapshot.value as? NSDictionary {

        for key in json.keyEnumerator() {
            if let dict = json.valueForKey(key as! String) as? NSDictionary {
                let contact = Contact(data: dict)
                contacts.append(contact)
            }
        }
    }
})

3 个答案:

答案 0 :(得分:1)

来自Firebase documentation on .ChildAdded

  

FIRDataEventTypeChildAdded事件为每个现有子项触发一次,然后每次将新子项添加到指定路径时再次触发。

使用持久性并不会对此行为产生影响。如果在您没有网络连接的情况下启动应用程序,它只会确保活动也能以这种方式运行。

答案 1 :(得分:0)

因为您正在注册observeEventType而不是observeSingleEventType。因此,在viewDidLoad中只注册一次事件。这是您第一次获得该节点中的所有可用数据。下一次,它将只给你添加新的孩子。如果你想每次都查询firebase,那么注册observeSingleEventType但是它将再次返回该节点中的所有可用数据,并将删除观察者,因为它是observeSingleEventType。

答案 2 :(得分:0)

使用此方法: Database.database()。reference()。child(“ anything”)。observeSingleEvent(of:.value,with:{快照在...

这将一次获取数据。