gpt4 book ai didi

ios - 使用 CKCloud 套件共享私有(private)记录

转载 作者:行者123 更新时间:2023-11-28 12:28:50 26 4
gpt4 key购买 nike

我正在使用以下代码尝试创建共享私有(private)记录:

@IBAction func testPress(_ sender: Any) {

let customZone = CKRecordZone(zoneName: "ShareZone")
let friendRecord = CKRecord(recordType: "Share", zoneID: customZone.zoneID)
let rootRecord = CKRecord(recordType: "Root", zoneID: customZone.zoneID)

model.privateDB.delete(withRecordZoneID: customZone.zoneID) { (nil, error) in
self.model.privateDB.save(customZone) { (nil, error) in
print("Custom Zone Error = \(error)")
self.model.privateDB.save(friendRecord, completionHandler: { (nil, error) in
self.model.privateDB.save(rootRecord, completionHandler: { (nil, error) in
self.shareTest(record: friendRecord, root: rootRecord)
})
})
}
}
}

func shareTest(record:CKRecord, root:CKRecord) {

record["Name"] = "Test" as CKRecordValue?
root["Name"] = "Test" as CKRecordValue?

let ckContainer = CKContainer.default()
let shareRecord = CKShare(rootRecord: root, share: record.recordID)

shareRecord[CKShareTitleKey] = "Name" as CKRecordValue?

let shareController = UICloudSharingController(share: shareRecord, container: ckContainer)
shareController.delegate = self
shareController.availablePermissions = [.allowReadOnly]

self.present(shareController, animated: false)
}

然而,当我按下分享链接的方式时,我返回了错误:

CKError 0x6000002535f0: "Invalid Arguments" (12); "An added share is being saved without its rootRecord (CKRecordID: 0x608000224560; recordName=C0ADC819-57F7-4D99-A527-B21590F506AB, zoneID=ShareZone:defaultOwner)"

我查看了 Link 的这个答案,他遇到了同样的问题,但不太清楚如何让他们的解决方案发挥作用,因为他们没有提供足够的细节。

有人知道我做错了什么吗?

最佳答案

我相信错误消息告诉您需要同时保存共享和根记录。

let modifyRecordsOperation = CKModifyRecordsOperation( recordsToSave: [record, share], recordIDsToDelete: nil)

您应该在 sharingController 的完成处理程序中执行此操作。

sharingController = UICloudSharingController {
controller, preparationCompletionHandler in

编辑:您的代码看起来像这样未经测试的代码:

@IBAction func testPress(_ sender: Any) {
let privatedatabase = CKContainer.default().privateCloudDatabase
let newZoneName = UUID().uuidString
let recordZone = CKRecordZone(zoneName: "ShareZone")

privatedatabase.save(recordZone) { savedRecordZone, error in

if let error = error {
print("\(error.localizedDescription).")
} else if let savedRecordZone = savedRecordZone {
print("\(error.localizedDescription).")

let rootRecord = CKRecord(recordType: "RootRecord", zoneID: savedRecordZone.zoneID)
rootRecord["Name"] = "Test" as CKRecordValue?

privatedatabase.save(rootRecord) { record, error in
if let error = error {
print("\(error.localizedDescription).")
} else if let record = record {
print("successfully added rootRecord to cloud.")
self.shareTest( rootRecord: record)
}
}
}
}
}

func shareTest(rootRecord:CKRecord) {

let ckContainer = CKContainer.default()
let shareRecord = CKShare(rootRecord: rootRecord)

let sharingController = UICloudSharingController { controller, preparationCompletionHandler in

let share = CKShare(rootRecord: record)
share[CKShareTitleKey] = "Share Title" as CKRecordValue
share.publicPermission = .none

let modifyRecordsOperation = CKModifyRecordsOperation( recordsToSave: [rootRecord, share], recordIDsToDelete: nil)
modifyRecordsOperation.timeoutIntervalForRequest = 10
modifyRecordsOperation.timeoutIntervalForResource = 10

modifyRecordsOperation.modifyRecordsCompletionBlock = { records, recordIDs, error in

if let error = error {
print(error.localizedDescription)
}
if let records = records {
print("Share and Root records saved successfully")
}
preparationCompletionHandler(share, CKContainer(identifier: ckContainerID ), error)
}

myCloudDatabase.add(modifyRecordsOperation)
}
if let sharingController = sharingController {
sharingController.availablePermissions = [.allowReadOnly, .allowReadWrite, .allowPrivate]
sharingController.popoverPresentationController?.sourceView = sender
sharingController.delegate = self
self.present(sharingController, animated: true)
}
}

// MARK: UICloudSharingControllerDelegate
// --------------------------------------
func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) {
print("Failed to share to cloud: \(error)")
}
func itemTitle(for csc: UICloudSharingController) -> String? {
return "Please join rootRecord share."
}
func cloudSharingControllerDidStopSharing(_ csc: UICloudSharingController) {
print("Cloudkit stopped sharing")
}
func cloudSharingControllerDidSaveShare(_ csc: UICloudSharingController) {
print("Cloudkit started sharing rootRecord")
}

关于ios - 使用 CKCloud 套件共享私有(private)记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com