2016-11-09 4 views
1

Я изучаю новый , который Apple выпустила в этом году, и у меня есть некоторые вопросы. Я пытался следить за видеороликом «Что нового в CloudKit» от WWDC, но часть кода больше не работает в Xcode.Как создать общий ресурс с помощью CKShare CloudKit?

Что я пытаюсь сделать, так это: пользователь вводит свое имя и телефон и после нажатия 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. Кроме того, CKRecord старейшина не отображается в информационной панели CloudKit.

+0

Обновить 'print (« ПРОБЛЕМА СОХРАНЯЮЩАЯ АКЦИЯ »)' '' print («ПРОБЛЕМА СОХРАНЕНИЕ АКЦИИ: \ (ошибка)») ', чтобы вы знали, почему она терпит неудачу. – rmaddy

+0

Да, я сделал сразу после того, как я разместил здесь ... но в любом случае ошибка заключается в следующем: 'Добавленный ресурс сохраняется без его rootRecord ()' , В основном я не создаю корневую запись, но я не понимаю, корневая запись - «старший», и она прямо над ней! –

+0

Должен ли я сохранить запись перед попыткой создать общий ресурс? –

ответ

2

Итак, я понял, что был неправ ... Я использовал зону по умолчанию, что облако набор создает для вас, и вы не можете сделать что при использовании CKShare. Все, что вам нужно сделать, это создать частный пользовательский CKZone и сохранить CKRecord и CKShare в нем!

+0

Зона по умолчанию не поддерживает совместное использование пользовательской зоны. –

1

Мне сказали, что вы можете использовать инициализатор, который вы выбрали для использования, только если этот ресурс уже создан. Для новых акций, используйте альтернативный INIT

Попробуйте этот код:

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

Эй! Я пробовал свой код, но я получаю сообщение об ошибке в 'mro.modifyRecordsCompletionBlock'. Я напечатал ошибку и только сказал следующее: «Необязательно (« Не удалось изменить некоторые записи »)» и, я думаю, из-за этого я не могу создать причину совместного доступа сразу после этого, я получаю «ПРОБЛЕМУ СДЕЛАЮЩЕЙ ДОЛЯ» "ошибка сообщения ... –

+0

Я также создал закрытие, чтобы убедиться, что запись сначала создана, чтобы затем вызвать методы CKShare, но даже это, похоже, не работает ... –

+0

CloudSharingController появляется без проблем, но эта ошибка возникает, когда я нажимаю любую кнопку для обмена, например, «Скопировать ссылку». –

Смежные вопросы