我已经尝试过现有的解决方案对我不起作用。我想做的是在Firestore中存储的线程中获取消息。这是Chat集合的当前结构:
如您所见,用户1和用户2之间的聊天只有2条消息,我正在尝试获取这些消息,如果它们已添加到线程中,还想听听新消息。这是我的代码:
func loadChat() {
self.showWaitOverlayWithText("Loading")
let db = Firestore.firestore().collection("Chats")
.whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
.whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")
db.getDocuments { (querySnap, error) in
if let error = error {
print("Error: \(error)")
return
} else {
let doc = querySnap?.documents.first
doc?.reference.collection("thread").addSnapshotListener(includeMetadataChanges: true, listener: { (threadQuery, error) in
//Never comes here
for message in threadQuery!.documents {
self.removeAllOverlays()
print("Data: \(message.data())")
}
})
}
}
}
它从不执行collection("thread").addSnapshotListner
。
答案 0 :(得分:0)
因此,问题仅仅是查询中的错误键“ user2UID”而不是“ user2ID”。通过检查可选值(doc
,querySnap
)是否为nil,我们能够查明此问题。 doc
等于nil,querySnap
等于n,但是其文档计数等于零。这有助于我们知道问题出在线路上
let db = Firestore.firestore().collection("Chats")
.whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
.whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")
最初,我认为问题可能是与后端的值而不是键不一致。 Chaundhry再看一次,确认密码不正确。