我的iOS应用商店的Firestore数据库具有以下文档和集合结构:
-ActiveSession (Application allows user to have only one active session in the collection):
--Session
-ArchivedSessions (collection that contains archived (closed) sessions):
--Session 1
--Session 2
--...
--Session N
在关闭会话时,应用程序设置CloseTime
参数,将文档复制到ArhivedSessions
集合中,并从ActiveSession
集合中删除原始文档。
我实现了这种结构,以避免性能方面的潜在问题-从集合中仅获取一个文档总是比在大量文档的集合中查找CloseTime
为空的文档总是容易的。
当我的应用程序在线时-所描述的逻辑可以正常工作。但是,当我尝试在离线模式下执行相同操作时(在我的代码中已明确启用该功能),它将无法正常工作。
预期结果:
在脱机模式下,应用程序将活动会话文档移至存档(复制和删除)。从ActiveSessions
集合中删除后,它变得不可用且仅在ArchivedSessions
集合中可访问。用户界面正在分别更新,应用程序允许用户添加另一个新的活动会话。
启用在线模式后-所有更改都将推送到Firestore Cloud,并以递增顺序获取所有文档:旧会话在ArchivedSessions
中关闭,新的活动会话-在ActiveSession
中关闭。
实际结果:
在脱机模式下,应用程序“移动”活动的会话文档(实际上我不知道如何检查)。但是实际上它仍然在ActiveSession
集合中可用,因此UI无法显示更改,因此不能允许用户添加新会话(因为旧会话显示为活动会话)。
请注意,我使用addSnapshotListener
从Cloud获取数据并观察更新。
我检查了StackOverflow,Firebase文档,但没有发现有关在脱机模式下在本地缓存中删除文档的任何信息。我发现的唯一发现是,在github上的某个地方提到了addSnapshotListeners
的回调仅在同步完成时才被调用(仅在联机模式下才有效)。