【发布时间】:2018-05-27 03:52:53
【问题描述】:
我上次观看了WWDC 2016 What's New with CloudKit 以了解如何使用 CKShare
与其他用户共享记录单条记录共享:
我能够共享和检索单个记录
即如果 xyz@gmail.com 已创建并共享单个记录到 abc@gmail.com
多条记录共享:
假设有 10 条记录,xyz@gmail.com 想要分享给 abc@gmail.com。当用户 xyz@gmail.com 与用户 abc@gmail.com
共享多条记录时,我遇到了这个问题到目前为止我所做的尝试:
首先我创建了 3 个笔记记录:
注1
Note2(将父级设为 Note1)
Note3(将父级设为 Note1)
我用下面的代码分享了 Note1(父记录):
CODE - 分享记录
let controller = UICloudSharingController { controller,
preparationCompletionHandler in
let share = CKShare(rootRecord: self.parentRecord!)
share[CKShareTitleKey] = "note" as CKRecordValue
share.publicPermission = .readOnly
let operation = CKModifyRecordsOperation(
recordsToSave: [self.parentRecord!, share],
recordIDsToDelete: nil)
operation.perRecordCompletionBlock = { (record, error) in
if let error = error {
print("CloudKit error: \(error.localizedDescription)")
}
}
operation.modifyRecordsCompletionBlock = { records, recordIDs, error in
if error != nil {
print(error?.localizedDescription ?? "Error")
} else{
print("Success")
preparationCompletionHandler(share,CKContainer.default(), error)
}
}
CKContainer.default().privateCloudDatabase.add(operation)
}
controller.availablePermissions = [.allowPrivate, .allowReadOnly]
controller.delegate = self
present(controller, animated: true)
并使用以下代码检索共享笔记:
CODE - 从共享笔记中读取数据
func application(_ application: UIApplication, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShareMetadata) {
let acceptSharesOperation = CKAcceptSharesOperation(
shareMetadatas: [cloudKitShareMetadata])
acceptSharesOperation.perShareCompletionBlock = {
metadata, share, error in
if error != nil {
print(error?.localizedDescription)
} else {
let operation = CKFetchRecordsOperation(
recordIDs: [cloudKitShareMetadata.rootRecordID])
operation.perRecordCompletionBlock = { record, _, error in
if error != nil {
print(error?.localizedDescription)
}
if let shareRecord = record {
DispatchQueue.main.async() {
// Shared record successfully fetched. Update user
// interface here to present to user.
print("\(shareRecord["id"]!)") // id of note
print("\(shareRecord["text"])") // text of note
print("Shared record successfully fetched")
}
}
}
operation.fetchRecordsCompletionBlock = { (recordsWithRecordIDs,error) in
if error != nil {
print(error?.localizedDescription)
}else {
if let recordsWithRecordIDs = recordsWithRecordIDs {
print("Count \(recordsWithRecordIDs.count)")
}
}
}
CKContainer.default().sharedCloudDatabase.add(operation)
}
}
CKContainer(identifier: cloudKitShareMetadata.containerIdentifier)
.add(acceptSharesOperation)
}
上述方法仅给出父注释数据(仅根/父)
查询:
1) 如何获取其他孩子的笔记记录? (我用儿童这个词来理解)
2) 是否需要每次检查是否有新的共享记录
因为我没有找到任何好的教程和来自 Apple 官方文档的来源。你会建议我共享和检索多条记录的方法吗?
提前谢谢..!
【问题讨论】: