Swift 5 Firestore:检查数据库中是不是存在集合
Posted
技术标签:
【中文标题】Swift 5 Firestore:检查数据库中是不是存在集合【英文标题】:Swift 5 Firestore: Checking if collection exists in databaseSwift 5 Firestore:检查数据库中是否存在集合 【发布时间】:2020-06-03 01:01:39 【问题描述】:我正在尝试检查我的 Firestore 数据库中是否存在某个集合,这是我的代码:
let db = Firestore.firestore()
db.collection(pickedClass).getDocuments (snapshot, error) in
if error == nil && snapshot != nil
if snapshot!.documents.count > 0
for document in snapshot!.documents
let documentData = document.data()
let info = documentData["info"] as! [String: Any]
output.append(object)
self.performSegue(withIdentifier: "showTutors", sender: output)
else
self.createAlert(title: "No Tutors Found", message: "Sorry, there are no tutors for this class", buttonMsg: "Okay")
我运行这个得到的异常显然来自第二行db.collection(pickedClass).getDocuments
,如下:
*** Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'Invalid collection reference. Collection references must have an odd number of segments, but has 0'
terminating with uncaught exception of type NSException
奇怪的是,大多数时候这不是问题,当集合不存在时用户会看到警报,但有时会发生这种情况。直到今天我才遇到这个问题,而且我已经运行这个数据库和这个 sn-p 代码两个多月了。
非常感谢任何帮助!
【问题讨论】:
请编辑问题以准确显示您传递给 collection() 的内容。最好不要使用变量,而是硬编码一个字符串来说明你在做什么以及你期望的结果。 请注意,Firestore 集合并不真正“存在”。查询任何名称的集合是完全有效的,即使它没有在控制台中看到并且没有文档。对该集合的查询将不会显示任何文档。 @DougStevenson 我正在传递pickerView 的结果,在本例中是一个字符串。我想我的问题是理解为什么这个异常只是有时而不是一直出现。 这很可能是pickedClass
成为nil
或在您使用它的特定时刻为空的结果。
在这里同意bsod:您的pickedClass
为空。在使用它来验证之前记录它,或者在有错误的行上设置一个断点并在调试器中运行。
【参考方案1】:
您好,我是第一次实施 FireStore,因为我在研究时发现了这个 回答你可以使用下面提到的代码。
Firestore.firestore().collection("YOUR_COLLECTION_NAME_HERE")
.document("INSIDE_YOUR_COLLECTION_USE_DOCUMENT_ID_HERE_WHICH_YOU_WANT_TO_CHECK")
.getDocument (document, error) in
debugPrint(document?.exists)
if document?.exists ?? false
// EXIST
else
// NOT-EXIST
【讨论】:
以上是关于Swift 5 Firestore:检查数据库中是不是存在集合的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 我如何检查 firebase 服务器是不是可用?