首页 > 解决方案 > 为什么在 Swift 中使用来自 Firestore 的侦听器获取数据时仍然会删除文档?

问题描述

我试图制作一个活动应用程序。我在我的活动文档中添加了一个新字段。我尝试为我的活动文档添加“场地”字段

所以在运行应用程序之前,我会删除 Firestore 数据库中的所有可用数据。但是当我将数据检索回应用程序时,据说“地点”为零,似乎“地点”字段不存在,尽管实际上“地点”字段存在于我的 Firestore 数据库中。

我怀疑我的应用程序仍在检索我已删除的文档。这就是为什么

这是我使用的代码:

enum FirestoreCollectionReference {
    case users
    case events
    case cities
    case APIKey

    private var path : String {
        switch self {
        case .users : return "users"
        case .events : return "events"
        case .cities : return "cities"
        case .APIKey : return "secretAPIKeyKM"
        }
    }

    func reference () -> CollectionReference {
        return Firestore.firestore().collection(path)
    }
}


FirestoreCollectionReference.events.reference()
                .whereField("city", isEqualTo: selectedCity)
                .whereField("eventType", isEqualTo: selectedEventType)
                .whereField("coordinate", isGreaterThan: lesserGeopoint)
                .whereField("coordinate", isLessThan: greaterGeopoint)
                .order(by: "coordinate")
                .order(by: "dateTimeStart", descending: true)
                .limit(to: 20)
                .addSnapshotListener { (snapshot, error) in

                    if let error = error {
                        completion(nil,eventListener)
                        print("Error when observing events document: \(error.localizedDescription)")
                    } else {
                        print("Successfully get events data from Firestore by Listener")

                        guard let documentsSnapshot = snapshot else {
                            completion(nil, eventListener)
                            return
                        }


                        let eventDocuments = documentsSnapshot.documents

                        print("the number of documents: \(eventDocuments.count)")


                        var eventsArray = [EventKM]()

                        for document in eventDocuments {
                            let eventDictionary = document.data()
                            let theEvent = EventKM(dictionary: eventDictionary)
                            eventsArray.append(theEvent)
                        }

                        completion(eventsArray,eventListener)

                    }

            }



        }

我尝试打印文档的数量,它显示我有 8 个来自此查询的文档,实际上,它应该只有一个文档在我的数据库中可用。

我尝试从firebase控制台删除复合索引,但通常,在我删除复合索引后,它会给出一个错误+一个链接来在我的Xcode的调试区域中生成复合索引,但是在我删除复合索引之后,我没有得到生成索引的错误+链接,并给出了 8 个文档(它应该只有一个文档)

似乎数据缓存在我的 iOS 应用程序上。不是吗?或者这是一个错误,因为 Firestore 仍处于 Beta 版本?我需要了解为什么以及如何解决此问题,以便更好地了解 Firebase。提前致谢。

标签: iosswiftfirebasegoogle-cloud-firestore

解决方案


FireBase 已缓存在设备中,因此如果用户留在互联网之外,
但仍然可以使用 Firebase。

因此,您只需在模拟器中删除您的应用程序。

就我而言,它修复了。

在此处输入图像描述


推荐阅读