首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CloudKit的CKShare创建共享?

如何使用CloudKit的CKShare创建共享?
EN

Stack Overflow用户
提问于 2016-11-09 19:06:49
回答 2查看 1.7K关注 0票数 2

我正在研究苹果今年发布的新CKShare,我对它有一些疑问。我试图跟随WWDC的“CloudKit中的新内容”视频,但部分代码在Xcode中不再起作用。

我想做的是:用户将输入他的名字和电话,在点击UIButton后,将与一个特定的人共享。以下是代码:

代码语言:javascript
复制
class ViewController: UIViewController, UICloudSharingControllerDelegate {
    @IBOutlet weak var nome: UITextField!
    @IBOutlet weak var telefone: UITextField!
    @IBOutlet weak var button: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func send(_ sender: AnyObject) {
        print("Send button was clicked.\n")

        let elder = CKRecord(recordType: "Elder")
        elder["name"] = self.name.text as CKRecordValue?
        elder["telephone"] = self.telephone.text as CKRecordValue?

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

        shareRecord[CKShareTitleKey] = "Elder" as CKRecordValue?

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

        self.present(shareController, animated: true)
    }

    func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) {
        print("PROBLEM SAVING SHARE")
    }

    func cloudSharingControllerDidSaveShare(_ csc: UICloudSharingController) {
        print("SHARE SAVED")
    }

    func itemTitle(for csc: UICloudSharingController) -> String? {
        return "a"   //don't know what this is for
    }
}

我的应用程序一直在打印“问题保存共享”,即使CloudSharingController出现了。而且,CKRecord长者没有出现在CloudKit的仪表板上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-18 19:52:34

所以我想出了什么问题..。我使用的是云工具包为您创建的默认区域,在使用CKShare时您不能这样做。您所要做的就是创建一个私有的自定义CKZone,并在其中保存CKRecord和CKShare!

票数 4
EN

Stack Overflow用户

发布于 2016-11-10 19:57:51

我被告知,只有在已创建共享的情况下,才能使用您选择使用的初始化器。对于新股,请使用备用init。

试试下面的代码:

代码语言:javascript
复制
let csc = UICloudSharingController { controller,
        preparationCompletionHandler in
        let share = CKShare(rootRecord: elder)

        let mro = CKModifyRecordsOperation(
            recordsToSave: [elder, share],
            recordIDsToDelete: nil)


        mro.modifyRecordsCompletionBlock = {
            records, recordIDs, error in
            if error != nil {
                    //handle error
            }
            preparationCompletionHandler(share,CKContainer.default(), error)
        }
        myDB.add(mro)
    }

    csc.delegate = self
    self.present(csc, animated:true, completion:nil)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40514231

复制
相关文章

相似问题

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