当我检查paypal.Buttons({
createSubscription: function (data, actions) {
return actions.subscription.create({
'plan_id': 'P-1G3183167U24246113LMNZLY'
});
},
onApprove: function (data, actions) {
alert('You have successfully created subscription ' + data.subscriptionID);
}
}).render('#paypal-button-container');
时,出现了错误Used with CloudKit
。关于有序关系有什么想法吗?
IDE:Xcode11 beta3
这里是Folder.children must not be ordered
实体。
答案 0 :(得分:5)
(适用于:从iOS 13开始,以及14的早期测试版)
云工具包不能使用有序关系(这会很糟糕,因为有序数据是存在的基本事物)。原因是,所有内容都由CKRecord(云工具包记录)支持,而不是实际的核心数据;这是一种完全不同的数据存储类型,PersistentCloudKitContainer正在将您的数据即时重写为CKRecords。 CKRecords没有一种机制可以像我们在Core Data有序关系中一样需要维护有序项目的日记。
这意味着它不太可能在短期内“修复”,因为通常需要对CloudKit和苹果的iCloud进行更改(而对CoreData进行更改)。
所以...
您有一些不好的选择:
无论做什么,这都是不好的:
无关系:无“获取父对象”,并通过关系获取对子对象的引用;您必须分别获取两者。也没有为您完成“删除”规则,例如“在删除父级时,级联删除子级。”当您需要多个集合中的孩子时,此方法将起作用(因为每个集合记录都拥有自己的孩子列表)
子对象的排序(这是我使用的):您必须在子对象的每个添加和删除操作中插入自己,并运行代码来调整所有子对象的orderIndex值。我通过具有CoreDataManager.createChild(atIndex :),CoreDataManager.deleteChild()和CoreDataManager.moveChild(toIndex :)函数来管理此问题,这些函数具有更新orderIndex值的副作用。但是至少您会得到“获取父对象;对于parent.children中的c,则...”,然后级联删除操作。但是:由于子项只有一个orderIndex值,因此子项只能在一个父项的列表中。
关系+父级中手动维护的排序字段:让核心数据管理关联,当您需要有序的子级时,可以使用parent.orderedChildren()函数来读取父级的.childOrder字段,并将其应用于.children列表。但是...您仍然必须手动管理父级的.childOrder字段,并在每次添加/删除/重新排序子级时对其进行更改。但是,使用Cloud Sync,随着在不同应用程序实例中添加/删除子项时,.child列表和.childOrder字段值不同步的情况可能存在许多潜在的错误。将子列表和排序保持独立意味着可以通过云同步分别更新它们。