我正在尝试使用CloudKit来同步用户创建的一系列项目。考虑具有特定序列的TODO列表。
我首先想到的是为每个TODO赋予一个 position 属性,但是我认为这不是一个好主意,因为当您从多个设备同步时,我不确定CloudKit如何处理合并。然后,缺少或重复的位置肯定会导致tableView崩溃。
我认为也许另一种方法是将TODO id序列保存到[String]
中,但实际上该数组会遇到相同的合并问题吗?
什么是最佳做法?
答案 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 ...但是您可以做最适合自己的事情)。
构建表格视图时,容易丢失或重复位置的错误-但是,如果在移动事件上遍历每个项目,那么无论哪种方式都不会出现该问题。
不确定我是否遵循“合并”问题-您能详细说明吗?