2016-11-09 9 views
1

나는 애플이 올해에 발표 한 새로운 을 연구 중이며, 그것에 대해 몇 가지 질문이있다. WWDC의 "CloudKit의 새로운 기능"비디오를 따르려고했지만 코드의 일부가 Xcode에서 더 이상 작동하지 않습니다.CloudKit의 CKShare를 사용하여 공유를 만드는 방법은 무엇입니까?

내가하려는 것은 사용자가 그의 이름과 전화 번호를 입력하고 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

'인쇄 ("문제 저장 공유 : \ (오류)") '를 인쇄하여 ("문제가있는 공유를 저장합니다.")'그것이 무엇이 실패했는지 알 수 있습니다. – rmaddy

+0

네, 여기에 게시 한 직후에 오류가 발생했습니다 :'추가 된 공유가 rootRecord ()' . 근본적으로 루트 레코드를 만들지는 못하지만, 루트 레코드는'elder'이고 그 바로 위에 있습니다! –

+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'에 오류가 있습니다. 나는 오류를 인쇄하고 단지 다음과 같이 말합니다 :'선택 사항 ("일부 기록을 수정하지 못했습니다")'나는 그 이유 때문에 주식을 바로 만들 수 없기 때문에 "문제가되는 저장 몫 "message error ... –

+0

또한 클로저를 만들어 레코드가 CKShare 메서드를 호출하기 위해 처음 만들어졌지만 작동하지 않는 것 같아요 ... –

+0

CloudSharingController가 문제없이 나타나지만 클릭하면이 오류가 발생합니다 공유 할 버튼 (예 : "링크 복사"). –

관련 문제