无法共享CloudKit CKShare记录

时间:2017-02-09 22:33:50

标签: ios swift cloudkit

我尝试在我的应用程序中实现云工具包共享,但是,每当我尝试使用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)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您为UICloudSharingController的实例使用了错误的初始化程序。 两个不同的用例两个不同的初始化器

  • 如果某项是首次共享(尚未共享),则必须使用rootRecord创建一个新的CKShare实例(就像在代码中所做的一样),但是必须使用此Initializer {{1初始化UICloudSharingController }}
  • 如果某个项目已经在共享过程中,那么您必须从iCloud中获取现有共享并使用此初始化程序init(preparationHandler:)
  • 初始化UICloudSharingController。

因此,您遇到的错误是,您创建了一个新的CKShare实例,但是使用了错误的初始化程序。

more from Apple

答案 1 :(得分:0)

您是否登录iCloud,该共享是否具有正确区域中根记录的正确链接等,和/或rootRecord是否存在...