用CloudKit同步序列的最佳方法是什么?

时间:2020-01-23 20:52:34

标签: ios swift core-data cloudkit

我正在尝试使用CloudKit来同步用户创建的一系列项目。考虑具有特定序列的TODO列表。

我首先想到的是为每个TODO赋予一个 position 属性,但是我认为这不是一个好主意,因为当您从多个设备同步时,我不确定CloudKit如何处理合并。然后,缺少或重复的位置肯定会导致tableView崩溃。

我认为也许另一种方法是将TODO id序列保存到[String]中,但实际上该数组会遇到相同的合并问题吗?

什么是最佳做法?

1 个答案:

答案 0 :(得分:0)

在我的一个应用程序中,我采用了添加序列属性(如您在问题中所说的位置属性)的方法。当我从CloudKit进行查询以获取所有项目时,我按我的sequence属性排序,然后所有内容在表视图中以正确的顺序显示。

对于编辑/更改顺序,我使用MoveRowAt()函数来允许用户拖放表中的项目并对其进行重新排序(以下示例)。

一旦移动了对象,我将为每个循环运行一个,以更新所有项目的sequence属性以反映新的序列。

   override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let movedObject = self.headlines[sourceIndexPath.row]
    headlines.remove(at: sourceIndexPath.row)
    headlines.insert(movedObject, at: destinationIndexPath.row)
}

上面的示例来自:https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/reorderable-cells/

然后我保存更新后的项目集(首先在本地存储到我的应用程序中的Core Data中,然后再推送至CloudKit ...但是您可以做最适合自己的事情)。

构建表格视图时,容易丢失或重复位置的错误-但是,如果在移动事件上遍历每个项目,那么无论哪种方式都不会出现该问题。

不确定我是否遵循“合并”问题-您能详细说明吗?