- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将 Firebase 数据库与 swift 结合使用。当我使用 databaseReference.observe(...)
进行观察时,我可以轻松地从 DatabaseReference 中删除观察者:
databaseHandle = databaseReference.observe(
.value,
with: { (snapshot) in ... },
withCancel: { (error) in ... })
...
databaseReference.removeObserver(withHandle: databaseHandle)
我的问题是当我使用 databaseReference.observeSingleEvent(...)
时。因为它不返回 FIRDatabaseHandle,所以我无法在需要时删除观察者。
我知道 databaseReference.observeSingleEvent(...)
会在观察者被触发后立即将其移除。但是,有时我需要在观察者被解雇之前将其移除。
我也知道我可以使用 databaseReference.removeAllObservers()
,但这对我来说不是一个方便的解决方案。
你们中有人知道我如何从 databaseReference 中过早地删除观察者(使用 observeSingleEvent(...)
创建)吗?
提前致谢
最佳答案
由于 databaseReference.observeSingleEvent(...)
不返回一个句柄,您可以删除唯一的选择是使用 databaseReference.observe(...)
.
当您需要或第一个事件触发时,只需手动移除 handle 。
尝试使用这个扩展:
public extension FIRDatabaseReference {
@discardableResult
public func observeOneEvent(of eventType: FIRDataEventType, with block: @escaping (FIRDataSnapshot) -> Swift.Void) -> FIRDatabaseHandle {
var handle: FIRDatabaseHandle!
handle = observe(eventType) { (snapshot: FIRDataSnapshot) in
self.removeObserver(withHandle: handle)
block(snapshot)
}
return handle
}
}
关于ios - 火力地堡 : How to removeObserver(withHandle:) after observeSingleEvent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226616/
我正在使用 Firebase 在我的应用程序中添加登录/注册。它运行良好,但现在我想检查用户在打开应用程序时是否已经注册并登录,如果是这样,则向他显示主页,否则向他显示登录页面。所以我做了一些搜索,主
我使用 flutter 。我想仅在 2020 年 4 月 26 日这一周将 Firebase 中的 CH 值更新为 false。什么时候有办法? 失败的 Ex.cord: _firestore.col
我来寻求您对我的申请中遇到的问题的帮助。 问题是这样的:新闻源上的帖子位于此捕获中的此帖子 -> [postid] 位置下的数据库中 ,当用户保存帖子时,它在数据库中的存储方式如下:用户 -> [us
我是一名优秀的程序员,十分优秀!