【发布时间】:2018-11-15 22:03:45
【问题描述】:
我将 Firestore 与 Swift 一起使用。
我有一个单例数据类 UserManager。我从不同的 ViewController 中调用它来获取数据以填充我的 tableviews。我希望表视图在更新集合时自动更新,所以我需要使用 SnapshotListener。一切正常,但我不确定当 Viewcontroller 关闭时如何与侦听器分离。
在单例类中,我有下面这样的方法。该方法提供了一个用户列表,并将从我的应用程序周围的几个不同位置调用。
我还想返回对侦听器的引用,以便在 Viewcontroller 关闭时可以从它中分离出来。但我无法让它工作。下面的解决方案给出了编译器错误。
我一直在尝试查看参考,例如这里 https://firebase.google.com/docs/firestore/query-data/listen 但是当数据加载到单例类而不是直接加载到 Viewcontroller 中时,我需要让它工作。怎么走?
在用户管理器中:
func allUsers(completion:@escaping ([User], ListenerRegistration?)->Void) {
let listener = db.collection("users").addSnapshotListener { querySnapshot, error in
if let documents = querySnapshot?.documents {
var users = [User]()
for document in documents {
let user = User(snapshot: document)
users.append(user)
}
completion(users, listener)
}
}
}
在 ViewController 中:
override func viewDidLoad() {
super.viewDidLoad()
UserManager.shared.allUsers(completion: { (users, listener) in
self.users = users
self.listener = listener
self.tableView.reloadData()
})
}
deinit {
self.listener.remove()
}
【问题讨论】:
-
你能发布你的编译器错误吗?
标签: ios swift firebase google-cloud-firestore