好问题。这是我推荐的。
区
首先,您只需要一个区域。但要从中共享记录,它必须是自定义区域(您不能使用_defaultZone
)。老实说,CloudKit 中的区域很奇怪,我不确定它们为什么存在。苹果似乎正在将数据库分片挑战转嫁给他们的开发人员。:)
像这样创建一个自定义区域:
let customZone = CKRecordZone(zoneName: "projectZone")
// Save the zone in the private database
let container = CKContainer(identifier: "...")
let privateDB = container.privateCloudDatabase
privateDB.save(customZone){ zone, error in
if let error = error{
print("Zone creation error: \(String(describing: error))")
}else{
print("Zone created: \(zone)")
}
}
记录类型
我会创建这样的记录类型:
Project
(根记录)
Task
Reminder
分享
CloudKit 的优点之一是您可以在记录之间创建关系。这意味着您可以自动共享根记录的子项,而无需CKShare
单独为每个子项设置 s。
下面的示例介绍了如何在记录中设置这些字段。
//Get a reference to the zone you created
let zoneID = CKRecordZoneID(zoneName: "projectZone", ownerName: CKCurrentUserDefaultName)
//Create a project record
let projectRecord = CKRecord(recordType: "Project", zoneID: zoneID)
projectRecord.setValue("My Cool Project", forKey: "name")
//Create a task record
let taskRecord = CKRecord(recordType: "Task", zoneID: zoneID)
taskRecord.setValue("My Task Name", forKey: "name")
//Create an association between the task and its parent project
let parentReference = CKReference(record: projectRecord, action: .deleteSelf)
taskRecord.setValue(parentReference, forKey: "project")
//When sharing, allow this task to be automatically shared if the parent project is shared
taskRecord.setParent(projectRecord)
所有这些都假定您为(type: )Project
和Task
记录类型创建字段。然后在记录类型上,您将拥有一个type 字段。name
String
Task
project
Reference
我希望这会有所帮助,至少能让你开始。我不知道 CloudKit Slack 频道,但如果您听说过,请告诉我!:)