我正在开发一个基本上类似于共享购物清单的应用程序。我愿意使用Cloudkit。
单独共享每个购物清单项目都没有意义,因此其想法是在清单级别创建共享。这样,名单上的所有项目都是共享的,如解释在这里
我已经成功实现了这个想法。基本上,列表的所有者可以创建项目,并且每次创建项目时,已接受与所有者共享列表的用户都可以在中看到新项目Shared Database
。我还检查了当用户修改其现有记录时Shared Database
,该修改反映在所有者的中Private Database
。
现在的问题是,不是列表所有者的人可能想要创建一个新项目。基本上,如果两个人共享一个购物清单,那么他们两个都应该能够在清单上添加要购买的新商品!看来这在Cloudkit上是不可能的。换句话说,只有parent
记录的所有者似乎能够创建子记录。有没有人找到这种用例的解决方案?
经过更多调查后,我正在回答自己的问题。
如果没有所有者,似乎无法在Cloudkit控制台中创建共享记录,但是可以从Swift中进行。
这是执行此操作的代码示例:
let sharedDatabase = CKContainer.default().sharedCloudDatabase
sharedDatabase.fetchAllRecordZones { (recordZone, error) in
let myZoneID = recordZone![0].zoneID//Temporary hack
let query = CKQuery(recordType: "parentRecordType", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
sharedDatabase.perform(query, inZoneWith: myZoneID) { (records, error) in
print(records)
let newID = CKRecord.ID(zoneID: myZoneID)
let nameRecord = CKRecord(recordType: "childRecordType", recordID: newID)
nameRecord.setValue("Created by someone who is not the owner", forKey: "title")
nameRecord.parent = CKRecord.Reference(record:records![0], action: .none)
CKContainer.default().sharedCloudDatabase.save(nameRecord) { (savedRecord: CKRecord?, error: Error?) -> Void in
print(error)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句