【问题标题】:Realm Sync data resets on app reinstall重新安装应用程序时 Realm Sync 数据重置
【发布时间】:2017-10-29 19:39:03
【问题描述】:

我有一个在本地使用 Realm 的 iOS 应用程序,它运行良好,我打算使用 Realm 对象服务器来启用:

  • 跨设备数据同步
  • 应用重新安装时数据恢复

我在最后一个问题上遇到了很多麻烦。我的应用程序中的流程如下:

  1. 首先,它尝试在我的 Realm Sync 中找到User。如果存在User,则执行步骤4,否则执行步骤2;
  2. 询问用户姓名、收入和发薪日;
  3. 获取用户的 iCloud 用户记录 ID 和 logIn 到领域对象服务器。
  4. 使用 SyncUser 的 identity 作为 User 实体标识符。将我刚刚询问的数据(姓名、收入和发薪日)保存到 Realm;
  5. 转到应用主屏幕,让用户享受应用。

ROS 正在使用基于 cloudkit 的身份验证。如果我按照上述步骤 1-4 操作,然后重新安装应用程序,则会出现问题。我希望之前创建的User 在步骤 1 中被检索,但是它在主键旁边的所有字段都设置为空白值(名称变为空字符串,收入和发薪日变为 0)。这种行为是预期的吗?我想做的事情是否符合 Realm 的目的?

编辑

@AustinZ 回答后让流程更清晰。

【问题讨论】:

  • 尝试检查 getter 而不是直接检查字段
  • 你的意思是像[user getName]吗?我正在使用 Swift,我有办法做到这一点吗?此外,我刚刚注意到 Realm Object Server 中的用户条目似乎也将其值设置为空白值(我正在查看 Realm Studio)。
  • 嗯..不确定。我不是很精通同步

标签: ios realm


【解决方案1】:

“应用安装时的数据恢复”绝对是 Realm Sync 的一个有效用例。但是,您描述的流程是有问题的。

同步的 Realm 由两条信息标识:同步用户和 Realm 在 Realm 对象服务器上的路径(例如 /~/my/realm)。如果您有相同的同步用户登录到多个设备,并且他们每个人都在相同的路径上打开一个 Realm 的副本,那么他们打开的是同一个同步的 Realm,并且彼此保持同步。

但是,要获得相同的同步用户,用户需要从他们的设备登录到领域对象服务器。为此,您可以使用 SyncCredentials.cloudKit(token:) 创建 CloudKit SyncCredentials 值并将该凭据传递给 SyncUser.logIn()。然后设备将与 Realm Object Server 通信,如果登录成功,则将调用 logIn() 方法的回调块并为您提供SyncUser。那是您打开 Realms 时需要使用的同步用户。

所以:

  • 您不应手动将用户或用户信息保存到领域。我们会自动保存相关信息。
  • 如果用户删除并重新安装他们的应用程序,该应用程序的文档和文件也会被删除,这意味着您不应该假设您可以在重新安装创建它的应用程序后访问 Realm 的数据。李>
  • 您应该做的是,在第 3 步中,使用用户的 CloudKit 凭据并如上所述登录到领域对象服务器。

请查看我们的documentation 了解更多信息。

【讨论】:

  • 哦,我的错。我忘了说明我在第 3 步中做了logIn。我提到的User 实体被设想用于存储其他数据(在这种情况下,是姓名、收入和发薪日)。没有任何与身份验证相关的内容。但我真的很好奇你在那里陈述的第二个要点。我不能假设?那我猜Realm对我来说不是最好的选择。
  • 你不能假设 local(离线)Realm 的文件仍然存在,显然是因为本地 Realm 就像任何其他磁盘文件一样,并且这些文件是卸载您的应用时删除。但是,当您打开 同步 Realm 时,将从服务器下载远程副本,因此他们将拥有在卸载应用程序之前拥有的所有数据。
  • 当然,这很明显。我遇到的问题是用户似乎已下载,但其字段中有空白值。它可以与我在代码中设置的默认值相关吗?这真的没有多大意义,但以防万一......
  • 如果您需要有关您的特定项目的详细帮助,欢迎您在我们的 GitHub (github.com/realm/realm-cocoa/issues) 上发帖,以获得更多个性化的关注。如果这样做,请准备好展示相关代码和示例项目(如果适用)。
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多