首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CKShare -未能修改某些记录错误- CloudKit

CKShare -未能修改某些记录错误- CloudKit
EN

Stack Overflow用户
提问于 2020-04-27 13:35:29
回答 3查看 544关注 0票数 0

我正试图与CloudKit中的其他用户共享一张记录,但我一直收到一个错误。当我点击桌子上的一个项目/记录时,我看到的是UICloudSharingController,我可以看到iMessage应用程序的图标,但是当我点击它时,我得到了一个错误,UICloudSharingController消失了,有趣的是,即使在出错之后,我仍然可以继续使用该应用程序。

这是我所拥有的。

代码

代码语言:javascript
复制
var items = [CKRecord]()
var itemName: String?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = items[indexPath.row]

    let share = CKShare(rootRecord: item)

    if let itemName = item.object(forKey: "name") as? String {
        self.itemName = item.object(forKey: "name") as? String
        share[CKShareTitleKey] = "Sharing \(itemName)" as CKRecordValue?
    } else {
        share[CKShareTitleKey] = "" as CKRecordValue?
        self.itemName = "item"
    }
    share[CKShareTypeKey] = "bundle.Identifier.Here" as CKRecordValue
    prepareToShare(share: share, record: item)
}


private func prepareToShare(share: CKShare, record: CKRecord){

    let sharingViewController = UICloudSharingController(preparationHandler: {(UICloudSharingController, handler: @escaping (CKShare?, CKContainer?, Error?) -> Void) in

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

        modRecordsList.modifyRecordsCompletionBlock = {
            (record, recordID, error) in

            handler(share, CKContainer.default(), error)
        }
        CKContainer.default().privateCloudDatabase.add(modRecordsList)
    })

    sharingViewController.delegate = self

    sharingViewController.availablePermissions = [.allowPrivate]
    self.navigationController?.present(sharingViewController, animated:true, completion:nil)
}



// Delegate Methods:
func cloudSharingControllerDidSaveShare(_ csc: UICloudSharingController) {
    print("saved successfully")
}
func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) {
    print("failed to save: \(error.localizedDescription)")// the error is generated in this method
}
func itemThumbnailData(for csc: UICloudSharingController) -> Data? {
    return nil //You can set a hero image in your share sheet. Nil uses the default.
}
func itemTitle(for csc: UICloudSharingController) -> String? {
    return self.itemName
}

错误

未能修改某些记录

我看到的是..。

知道有什么不对吗?

编辑:

顺便说一句,错误是在cloudSharingController failedToSaveShareWithError方法中生成的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-30 20:28:52

看起来你在尝试共享默认区域,这是不允许的。从docs 这里

只有在具有CKRecordZoneCapabilitySharing功能的区域中才支持共享。默认区域不支持共享。

因此,您应该在您的私有数据库中设置一个自定义区域,并在那里保存您的共享和记录。

票数 1
EN

Stack Overflow用户

发布于 2020-04-28 14:17:01

可能是因为您试图实例化UICloudSharingController的方式?我直接从医生那里抄袭出来的,效果很好:

代码语言:javascript
复制
let cloudSharingController = UICloudSharingController { [weak self] (controller, completion: @escaping (CKShare?, CKContainer?, Error?) -> Void) in
    guard let `self` = self else {
       return
    }
    self.share(rootRecord: rootRecord, completion: completion)
}

如果这不是问题所在,那么这是一个或两个记录本身的问题。如果你上传的记录没有尝试分享,它工作吗?

编辑以添加:

CKShareTypeKey是什么?在我的应用程序中我不使用这个。此外,我还以不同的方式设置了系统字段:

代码语言:javascript
复制
share?[CKShare.SystemFieldKey.title] = "Something"
票数 1
EN

Stack Overflow用户

发布于 2020-05-20 15:38:10

尝试将其添加到info.plist中

代码语言:javascript
复制
<key>CKSharingSupported</key>
<true/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61460148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档