Ios 为什么在Swift中使用Firestore的listener获取数据时,我仍然会得到已删除的文档?

Ios 为什么在Swift中使用Firestore的listener获取数据时,我仍然会得到已删除的文档?,ios,swift,firebase,google-cloud-firestore,Ios,Swift,Firebase,Google Cloud Firestore,我正在尝试制作一个事件应用程序。我在事件文档中添加了一个新字段。我尝试为我的活动文档添加“地点”字段 因此,在运行应用程序之前,我会删除Firestore数据库中的所有可用数据。但当我将数据检索回应用程序时,据说“地点”为零,似乎“地点”字段不存在,尽管事实上,“地点”字段存在于我的firestore数据库中 我怀疑我的应用程序仍然检索我删除的文档。这就是原因 以下是我使用的代码: enum FirestoreCollectionReference { case users ca

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

因此,在运行应用程序之前,我会删除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上的调试区域中提供一个error+链接来生成复合索引,但在我删除复合索引后,我没有获得error+链接来生成索引,并给出8个文档(仅限一份文件)


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

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

所以您只需在模拟器中删除应用程序。

就我而言,它是固定的


如果数据确实缓存在您的设备上,快照侦听器应启动两次:第一次启动缓存中的(过时)数据,第二次启动(更新)来自服务器的数据。如果第二次没有发生,则很可能客户端无法连接到Firestore服务器。是的,导致我的应用程序崩溃的缓存数据。我可以通过编程删除/删除缓存吗?我的意思是完全删除缓存,而不是使用.isPersistenceEnabled=false?没有API删除缓存数据。但是,在如果成功(因此不会崩溃)侦听更新的数据一次,则应更新缓存。如果这不起作用,请删除应用程序并重新安装。