Firestore 崩溃
Crashes with Firestore
当我在集合中查询不存在的文档时,我仍然返回一个非 nil 对象,当我尝试调用 documentSnapshot?.data()
.
时它崩溃了
返回的错误是"Document '<FSTDocumentKey: XXXXXX>' doesn't exist. Check document.exists to make sure the document exists before calling document.data.'"
我发现这可以用一个漂亮的小守卫声明来解决:
guard (documentSnap?.exists ?? false), error == nil else { return }
这是此检查的一个工作示例:
func getUserData(uid: String, completion: @escaping(([String: Any]?, Error?)) -> ()) {
let document = defaultStore.collection("user-data").document(uid)
document.getDocument { (documentSnap, error) in
guard (documentSnap?.exists ?? false), error == nil else {
completion((nil, error))
return
}
completion((documentSnap?.data(), error))
}}
我不知道你为什么要调用 .exists()
,而且文档不仅仅是零,但这要么是学习曲线的一部分,要么是 Beta SDK 的产物
有无快照我是这样处理的。
func fetchCity(city: String, completion: @escaping (_ isSuccess: Bool, _ document: DocumentSnapshot?)->()){
REF_CITIES.document(city).getDocument { (document, err) in
if (document?.exists)! {
completion(true, document)
}else {
print(err?.localizedDescription)
completion(false, nil)
}
}
}
您只能将 .exists 用于 DocumentSnapshot。您不能将它用于 QuerySnapshot,因为 QuerySnapshot 实际上是多个 DocumentSnapshot。
当我在集合中查询不存在的文档时,我仍然返回一个非 nil 对象,当我尝试调用 documentSnapshot?.data()
.
返回的错误是"Document '<FSTDocumentKey: XXXXXX>' doesn't exist. Check document.exists to make sure the document exists before calling document.data.'"
我发现这可以用一个漂亮的小守卫声明来解决:
guard (documentSnap?.exists ?? false), error == nil else { return }
这是此检查的一个工作示例:
func getUserData(uid: String, completion: @escaping(([String: Any]?, Error?)) -> ()) {
let document = defaultStore.collection("user-data").document(uid)
document.getDocument { (documentSnap, error) in
guard (documentSnap?.exists ?? false), error == nil else {
completion((nil, error))
return
}
completion((documentSnap?.data(), error))
}}
我不知道你为什么要调用 .exists()
,而且文档不仅仅是零,但这要么是学习曲线的一部分,要么是 Beta SDK 的产物
有无快照我是这样处理的。
func fetchCity(city: String, completion: @escaping (_ isSuccess: Bool, _ document: DocumentSnapshot?)->()){
REF_CITIES.document(city).getDocument { (document, err) in
if (document?.exists)! {
completion(true, document)
}else {
print(err?.localizedDescription)
completion(false, nil)
}
}
}
您只能将 .exists 用于 DocumentSnapshot。您不能将它用于 QuerySnapshot,因为 QuerySnapshot 实际上是多个 DocumentSnapshot。