在 CloudKit 中保存对象数组
Saving An Array Of Objects In CloudKit
我对如何最好地保存包含其他对象数组的对象感到困惑 CloudKit。
假设我有一个待办事项列表应用程序,其中包含不同的项目集合。我将如何处理 saving/fetching 整个项目集合?
我是否会有一个记录类型的集合,它会有一个名为 "Name" 的字符串属性,然后是一个名为 "Items" 的引用列表属性?
我知道项目的记录类型需要有一个名为 "Collection" 的引用属性,因为 CloudKit 从子对象到其父对象的引用方式。
我已经使用以下代码成功保存了一个没有任何 Item 实例的 Collection
func addCollection(collection: Collection!, completion: (error: NSError!) -> ()) {
if collection == nil
return
}
let collectionRecord = CKRecord(recordType: "Collection")
CollectionRecord.setObject(collection.name, forKey: "Name")
privateDB.saveRecord(collectionRecord) {
record, error in
dispatch_async(dispatch_get_main_queue()) {
completion(error: error)
}
}
}
另一种选择是在保存集合时循环遍历 Item 的所有实例并单独保存它们,它们对集合的引用属性在 CloudKit 端建立连接,但这似乎也是一种方式许多网络调用。
对于 Item
条记录,您需要 CKReference
到 Collection
。然后你就可以在上面设置 CKReferenceAction
了。您不需要在 Collection
上创建 CKReference
列表。
当您计划使用 CKReferenceAction.None
时,只有一个 CKReference 对象列表是一个选项,这意味着两个 recordTypes 之间没有严格的关系
如果您有一个 Collection
对象,那么您可以使用检查 CKReference 是否是 Collection
.[=26= 的谓词轻松查询 Item
recordType ]
通常不需要保存多条记录。一旦你创建了一个包含项目的集合,关系就可以保持不变。如果您确实需要更改多个记录,那么您可以尝试使用 CKModifyRecordsOperation
,它支持一次操作保存多个项目。
将现有 Item
记录类型链接到 Collection
时,您确实需要保存每个 Item
,因为它有一个指向 Collecion
的 CKReference。 Item
已更改,必须保存。
我对如何最好地保存包含其他对象数组的对象感到困惑 CloudKit。
假设我有一个待办事项列表应用程序,其中包含不同的项目集合。我将如何处理 saving/fetching 整个项目集合?
我是否会有一个记录类型的集合,它会有一个名为 "Name" 的字符串属性,然后是一个名为 "Items" 的引用列表属性?
我知道项目的记录类型需要有一个名为 "Collection" 的引用属性,因为 CloudKit 从子对象到其父对象的引用方式。
我已经使用以下代码成功保存了一个没有任何 Item 实例的 Collection
func addCollection(collection: Collection!, completion: (error: NSError!) -> ()) {
if collection == nil
return
}
let collectionRecord = CKRecord(recordType: "Collection")
CollectionRecord.setObject(collection.name, forKey: "Name")
privateDB.saveRecord(collectionRecord) {
record, error in
dispatch_async(dispatch_get_main_queue()) {
completion(error: error)
}
}
}
另一种选择是在保存集合时循环遍历 Item 的所有实例并单独保存它们,它们对集合的引用属性在 CloudKit 端建立连接,但这似乎也是一种方式许多网络调用。
对于 Item
条记录,您需要 CKReference
到 Collection
。然后你就可以在上面设置 CKReferenceAction
了。您不需要在 Collection
上创建 CKReference
列表。
当您计划使用 CKReferenceAction.None
时,只有一个 CKReference 对象列表是一个选项,这意味着两个 recordTypes 之间没有严格的关系
如果您有一个 Collection
对象,那么您可以使用检查 CKReference 是否是 Collection
.[=26= 的谓词轻松查询 Item
recordType ]
通常不需要保存多条记录。一旦你创建了一个包含项目的集合,关系就可以保持不变。如果您确实需要更改多个记录,那么您可以尝试使用 CKModifyRecordsOperation
,它支持一次操作保存多个项目。
将现有 Item
记录类型链接到 Collection
时,您确实需要保存每个 Item
,因为它有一个指向 Collecion
的 CKReference。 Item
已更改,必须保存。