【发布时间】:2017-03-23 16:36:26
【问题描述】:
我正在研究 Apple 今年发布的新 CKShare,对此我有一些疑问。我试图关注 WWDC 的“CloudKit 中的新功能”视频,但部分代码在 Xcode 中不再有效。
我要做的是:用户将输入他的姓名和电话,然后单击UIButton,将与特定的人共享。代码如下:
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,我的应用程序仍会继续打印“PROBLEM SAVING SHARE”。此外,CKRecord elder 没有出现在 CloudKit 的仪表板中。
【问题讨论】:
-
将
print("PROBLEM SAVING SHARE")更新为print("PROBLEM SAVING SHARE: \(error)"),这样您就知道它失败的原因了。 -
是的,我在这里发帖后就这样做了……但无论如何,错误是:
An added share is being saved without its rootRecord (<CKRecordID: (-big cloudkit stuff-):(_defaultZone:__defaultOwner__)>)。基本上我不是在创建根记录,但是我不明白,根记录是elder,它就在它的正上方! -
我应该在尝试创建共享之前保存记录吗?