Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Firebase observeEventType.childAdded不';我不能如约工作_Ios_Swift_Firebase_Firebase Realtime Database_Observers - Fatal编程技术网

Ios Firebase observeEventType.childAdded不';我不能如约工作

Ios Firebase observeEventType.childAdded不';我不能如约工作,ios,swift,firebase,firebase-realtime-database,observers,Ios,Swift,Firebase,Firebase Realtime Database,Observers,当我从我的viewcontroller中调用此观察函数时,.childadded会立即返回一个已经存储的对象,而不是刚刚添加的bin,就像一样。childadded会怀疑的那样 func observe(callback: RiderVC){ let ref = DBProvider.Instance.dbRef.child("rideRequests") ref.observe(DataEventType.childAdded) { (snapshot: DataSnapsho

当我从我的viewcontroller中调用此观察函数时,
.childadded
会立即返回一个已经存储的对象,而不是刚刚添加的bin,就像
一样。childadded
会怀疑的那样

func observe(callback: RiderVC){
    let ref = DBProvider.Instance.dbRef.child("rideRequests")
    ref.observe(DataEventType.childAdded) { (snapshot: DataSnapshot) in
    if let data = snapshot.value as? NSDictionary {
    let drive = cabRide(ritID: ritID, bestemming: bestemming, 
     vanafLocatie: vanaf, taxiID: taxiID, status: status)
    print(drive)
    callback.alertForARide(title: "Wilt u deze rit krijgen?", message: "Van: \(vanaf), Naar: \(bestemming)", ritID: ritID)
    }
  } 
}
当我使用
.childchanged
尝试此函数时,我只会在它像预期那样更改时收到警报,但在执行
.chiladded
时,它只会从数据库中获取所有请求,并且这些请求已经存在

当我添加新请求时,它也会发出警报。所以它是有效的,但我如何才能摆脱未添加和已经存在的请求呢


有人知道这个缺陷吗?

这完全按照承诺工作。从文件中:

检索项目列表或侦听项目列表中的添加项。 此事件针对每个现有子级触发一次,然后再次触发 每次将新子级添加到指定路径时。听众是 传递了包含新子级数据的快照

这在一开始可能看起来很奇怪,但这通常是大多数开发人员想要的,因为这基本上是一种从数据库中的特定分支请求所有数据的方法,即使将来会向其中添加新项

如果你想让它按照你所描述的方式工作,在你的应用程序启动后,你只能在数据库中获得新的项目,你需要自己做一些工作。首先,您需要向要添加到数据库的对象添加时间戳。然后,您将需要执行某种调用,其中您要求通过这些时间戳查询数据库。它可能看起来像这样:

myDatabaseRef.queryOrdered(byChild: "myTimestamp").queryStarting(atValue: <currentTimestamp>)
myDatabaseRef.queryOrdered(byChild:“myTimestamp”).QueryStart(atValue:)
祝你好运