0

在另一个答案中读到 Simperium 应该能够很好地处理 Core Data 轻量级迁移。但是,我目前正在为向现有实体添加(可选)属性的简单案例而苦苦挣扎。

为了让这个问题更容易理解,让我们看一个例子。假设我以前的应用程序版本是 1.0,而新版本 1.1foo在 Core Data 实体上引入了一个新属性。

现在,让我们考虑这种情况:

  1. 设备 A 和 B 都运行 1.0 版并附加到同一个 Simperium 同步帐户,都是最新的。
  2. 设备A升级到1.1版本,在数据库中创建属性,用户在新foo属性中添加一些数据。此数据已正确同步到 Simperium 后端,并且foo在 Web 数据浏览器中可见。
  3. 设备 B(仍在 1.0 版上,即没有foo)与 Simperium 同步。在这一点上我看到Simperium warning: applyDiff for a member that doesn't exist了,这是可以理解的,因为foo不存在。这里的一切都还不错。
  4. 现在设备 B 升级到 1.1。首次启动应用程序时,Core Data 会创建新foo列。但是,既然foo属性已经存在,Simperium 仍然不会从后端提取其数据,因此设备 A 和 B 看不到相同的数据foo

我理解为什么会发生这种情况(Simperium 第一次放弃了更改,因为该属性还不存在,然后在以后可能时不会再次应用相同的更改)。但是,我认为这是非常有问题的,并且实际上即使对数据模型进行最简单的更改也非常冒险。我在这里错过了什么吗?向实体添加新属性的安全方法是什么?

4

1 回答 1

1

抱歉,我们花了一段时间才回复(请随时在 Github 上打开问题!)。

目前,在迁移方面几乎没有任何警告。

我已经提交了这个问题,以正确处理新属性方案,以及处理属性重命名的问题。

现在,虽然协议是有弹性的,并且同步应该自行恢复(在发生某些事情的情况下,并且客户端不同步,即迁移),但属性重命名会导致故障。

目前,我担心最简单 // 最安全的迁移方式是创建另一个具有所需属性集的存储桶。

很抱歉给您带来不便,我们将对此进行迭代!

于 2015-09-25T18:58:52.753 回答