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:检查数据库中是不是存在集合的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:ID 在集合中是唯一的还是全局唯一的?

Swift - 我如何检查 firebase 服务器是不是可用?

<~~ 在 swift 中是啥意思?

如何在 Swift 中使用 Firestore 为 2 人多人游戏构建数据?

使用 Swift 将数据上传到 Firestore 时出错

将数据从 Firestore 映射到 Swift 中的结构 - IOS