我在Realm的任务演示应用程序之后实现了实时同步。
在那里使用了一个虚拟容器,用来容纳带有模型的List
。
演示应用程序似乎不支持离线使用。
我想知道,在这种设置下,当我在联机和脱机设备上启动应用程序,然后使用脱机设备联机时会发生什么。
我最初的期望是以2个容器结束(这将是一个无效状态),但当我进行测试时,令人惊讶的是,最后只有1个容器。
但有时我会得到两个容器,却无法确定是什么原因导致了这种情况。
那么问题是,这究竟是如何运作的呢?我认为,当我第一次同步脱机设备时,容器通常不会重复的原因是它被作为同一个对象处理,可能是因为它没有主键或其他什么?但为什么有时会重复呢?这里的最佳实践是什么?我可能需要使用主键吗?或者在连接后检查是否有重复,如果有,请手动合并容器?
目前,Realm Tasks只是在尝试添加新的基本列表容器对象之前检查默认Realm是否为空。如果在进行此检查时同步过程尚未完成,那么创建第二个容器是合理的。当在本地网络上测试应用程序时,这通常不是问题,因为下载速度很快,但我们肯定应该对此进行更彻底的测试。
添加主键肯定会有所帮助,因为这意味着如果在本地创建第二个列表,它将与服务器上的版本合并。
我们最近一直在关注第二台设备通过新的进度通知系统连接到用户的Realm移动平台帐户时的"登录"过程。更合乎逻辑的方法是在登录后等待同步完成初始下载,然后检查对象的存在。一旦文档完成,我们很可能会修改Realm Tasks处理此问题的方式。
演示应用程序(以及Realm移动平台)确实支持离线,但只有在用户首次登录后(即最初生成这些容器对象时)。之后,这些应用程序可以离线使用,在此期间所做的任何更改都会在下次上线时同步。
我们计划建立"匿名用户"功能,用户可以立即开始使用应用程序(甚至离线),然后他们在登录前所做的任何更改(由于他们离线)都会在登录后转移到用户帐户。