【问题标题】:Unique Realm container objects唯一领域容器对象
【发布时间】:2017-02-04 13:58:17
【问题描述】:

我在 Realm 的任务演示应用之后实现了实时同步。

这里使用了一个虚拟容器,用于将List 与模型一起保存。

演示应用似乎不支持离线使用。

我想知道,在这种设置下,我在在线和离线设备上启动应用程序,然后使用离线设备上网时会发生什么。

我最初的期望是我会以 2 个容器结束(这将是一个无效状态),但是当我惊讶地测试时,最后只有 1 个容器。

但有时我得到 2 个容器,但无法确定是什么原因造成的。

那么问题是,这究竟是如何工作的?我认为当我第一次同步离线设备时容器通常不会重复的原因是它被作为同一个对象处理,可能是因为它没有主键或其他什么?但是为什么有时会重复呢?这里的最佳做法是什么?我是否可能必须使用主键或在连接后检查是否存在重复,如果是,则手动合并容器?

【问题讨论】:

    标签: ios swift realm realm-mobile-platform realm-object-server


    【解决方案1】:

    目前,Realm Tasks 仅在尝试添加新的基本列表容器对象之前检查默认 Realm 是否为空。如果在此检查发生时同步过程尚未完成,则创建第二个容器是合理的。在本地网络上测试应用程序时,这通常不是问题,因为下载速度非常快,但我们绝对应该更彻底地测试一下。

    添加主键肯定会有所帮助,因为这意味着如果在本地创建第二个列表,它将与从服务器下来的版本合并。

    我们最近一直关注“入职”过程,即第二台设备通过新的进度通知系统连接到用户的 Realm 移动平台帐户。更合乎逻辑的方法是在登录后等待同步完成初始下载,然后检查对象是否存在。文档完成后,我们很可能会修改 Realm Tasks 处理此问题的方式。

    演示应用程序(以及 Realm 移动平台)确实支持离线,但仅在用户第一次登录后(即最初生成这些容器对象时)。在此之后,应用程序可以离线使用,并且在此期间所做的任何更改都会在下次上线时同步。

    我们计划构建“匿名用户”功能,用户可以立即开始使用应用程序(甚至离线),然后他们在登录之前所做的任何更改(由于他们离线)然后转移到之后的用户帐户。

    【讨论】:

    • 谢谢!然后修复似乎是添加一个主键。我想知道为什么合并在没有它的情况下大部分时间都有效。也许有一个内部对象标识,其使用方式与主键类似?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多