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