我有一个简单的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)
}
}
}
})
答案 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:{快照在...
这将一次获取数据。