Wil*_*son 9 swift ios8 cloudkit ckreference
我对如何最好地保存包含CloudKit中其他对象数组的对象感到困惑.
假设我有一个待办事项列表应用程序,它有不同的项目集合.我如何保存/获取整个项目集合?
我是否有一个Record类型的Collection,它有一个名为"Name"的String属性,然后是一个名为"Items"的引用列表属性?
我知道Record类型的Item需要有一个名为"Collection"的引用属性,因为CloudKit如何从子对象引用它的父对象.
我已设法使用以下代码保存没有任何Item实例的集合
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一个选项是在保存Collection时,循环遍历Item的所有实例并单独保存它们,它们的Reference Attribute to Collection在CloudKit端进行连接,但这似乎是太多的网络调用.
对于Item
记录,您需要CKReference
到Collection
. 然后您就可以对其进行设置CKReferenceAction
。您不需要CKReference
在 上创建列表Collection
。
拥有 CKReference 对象列表只是您计划使用时的一个选项,CKReferenceAction.None
这意味着两个 recordType 之间没有严格的关系
如果您有一个Collection
对象,那么您可以Item
使用谓词轻松查询 recordType,该谓词检查 CKReference 是否是Collection
.
通常不需要保存多条记录。一旦您创建了包含项目的集合,关系就可以保持不变。如果您确实需要更改多个记录,那么您可以尝试使用CKModifyRecordsOperation
支持在一个操作中保存多个项目的功能。
Item
将现有的recordType链接到 时Collection
,您确实需要保存每个记录类型Item
,因为它有一个指向 的 CKReference Collecion
。已Item
更改,因此必须保存。
归档时间: |
|
查看次数: |
2584 次 |
最近记录: |