我尝试在我的应用程序中实现云工具包共享,但是,每当我尝试使用UICloudSharingController
共享项目时,我都会收到一致的错误:
我看到了添加人员的初始分享弹出窗口,然后当我选择其中一个关于我希望如何发送邀请的选项时(即:通过邮件),UICloudSharingControllerDelegate
会返回主叫:
func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error)
并抛出错误:
CKError 0x170245d60:"无效参数" (12); "在没有rootRecord的情况下保存添加的共享(CKRecordID:0x1700343e0; recordName = C9FA0E96-3461-4C9E-AB99-3B342A37A07A,zoneID = PrivateDatabase:__ defaultOwner _)"
我已经在私有云数据库中为zoneId为" PrivateDatabase"的用户创建了自定义区域。我创建了一个对象,并成功将其保存到iCloud,并将其链接到我之前创建的自定义区域。我用来呈现UICloudSharingController的代码如下:
let object = // A core data representation of a CKRecord //
let share = CKShare(rootRecord: object.record) //record is a CKRecord that is stored with the core data object
share[CKShareTitleKey] = object.name as? CKRecordValue
share[CKShareThumbnailImageDataKey] = UIImagePNGRepresentation(object.categoryKey.icon()) as? CKRecordValue
share[CKShareTypeKey] = "reverse.domain" as CKRecordValue
share.publicPermission = .readOnly
let sharingController = UICloudSharingController(share: share, container: self.container)
sharingController.delegate = self
sharingController.availablePermissions = [.allowPrivate, .allowReadOnly]
sharingController.popoverPresentationController?.sourceView = sourceView
controller.present(sharingController, animated: true, completion: nil)
我在这里缺少什么?
答案 0 :(得分:1)
您为UICloudSharingController的实例使用了错误的初始化程序。 两个不同的用例有两个不同的初始化器。
init(preparationHandler:)
因此,您遇到的错误是,您创建了一个新的CKShare实例,但是使用了错误的初始化程序。
答案 1 :(得分:0)
您是否登录iCloud,该共享是否具有正确区域中根记录的正确链接等,和/或rootRecord是否存在...