使用 CloudKit 保持 NSArray 的顺序

Keep order of NSArray with CloudKit

我目前正在设计一个基于 CloudKit 的同步解决方案,我想知道最好的方法是保持云项目列表(在我的例子中是一个数组)的顺序(CKRecord 对象)一致。

Apple 建议不要持有对子对象的引用,而是仅使用来自子对象的 CKReference 来引用父对象。如果您想根据其中一项属性(例如创建日期)查询您的项目,这很好用,但如果您有一个由用户确定的订单,则不行。

我提出了两种基于相同想法的不同方法:维护标识符清单以管理项目的位置。

1) 同步一个额外的记录(又名清单),它有一个标识符数组,每个标识符标识一个 CKRecord 对象(和相应的本地模型对象)。

2) 创建一个父对象,其中包含对其子对象的引用数组(CKReference 对象)。该数组保持给定顺序。

我觉得这不是解决这个问题的最佳方法,我很高兴听到你的想法。

Apple 建议不要保留对子对象的引用,但这并不意味着您不能只在对象中包含一个带有记录 ID 的数组。这些不必是 CKReference 对象。您可以只保存一个字符串值数组。

我认为您是对的,这将是 best/easiest 维护排序顺序的方法。

另一种解决方案是创建链表。然后每条记录都需要对下一条记录的引用。更改订单时,只需更改3条记录即可。 1 确实指向您的记录的记录,将指向您的记录的新记录和记录本身。