首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法与UICloudSharingController共享;消失并显示“正在上载”消息

无法与UICloudSharingController共享;消失并显示“正在上载”消息
EN

Stack Overflow用户
提问于 2020-08-31 06:14:31
回答 1查看 100关注 0票数 7

当在视图顶部显示UICloudSharingController时,它会显示屏幕,当我选择messages选项向想要与其共享的人发送消息时,它会给出一个带有“上载”消息的旋转轮,并消失-附加

但是,当我转到cloudkit仪表板时,根记录已经共享。但是我不能和特定的人分享。是因为它已经共享了全局吗?我怎么才能修复它?

代码语言:javascript
复制
self.shareInfraRecord(zoneID: appDelegate.privateContactZoneID, completion: { (status) in
     if ( status == false) {
             return
      }
    })

func shareInfraRecord(zoneID: CKRecordZone.ID, completion: @escaping(Bool) -> Void) {
    
    if let rootRecord = self.rootRecord {
        if self.rootRecord?.share == nil {
            let sharingController = UICloudSharingController { (controller, preparationHandler: @escaping (CKShare?, CKContainer?, Error?) -> Void) in
                
                let shareID = CKRecord.ID(recordName: UUID().uuidString, zoneID: zoneID)
                var share = CKShare(rootRecord: rootRecord, shareID: shareID)
               
                share[CKShare.SystemFieldKey.title] = Cloud.ShareInfrastructure.ContactShareTitleKey as CKRecordValue?
                share[CKShare.SystemFieldKey.shareType] = Cloud.ShareInfrastructure.ContactShareTypeKey as CKRecordValue?
               
                let modifyRecZoneOp = CKModifyRecordsOperation(recordsToSave:[rootRecord, share], recordIDsToDelete: nil)
                modifyRecZoneOp.modifyRecordsCompletionBlock = { (records, recordID, error) in
                    if error != nil {
                        if let ckerror = error as? CKError {
                            if let serverVersion = ckerror.serverRecord as? CKShare {
                                share = serverVersion
                            }
                            completion(false)
                        }
                    }
                    preparationHandler(share, self.defaultContainer, error)

                }
                self.privateDB?.add(modifyRecZoneOp)
            }
        
            sharingController.availablePermissions = [.allowReadOnly, .allowPrivate]
            sharingController.delegate = self
            sharingController.popoverPresentationController?.sourceView = self.view
        
            self.present(sharingController, animated:true, completion:nil)

    } else {
            let shareRecordID = rootRecord.share!.recordID
            let fetchRecordsOp = CKFetchRecordsOperation(recordIDs: [shareRecordID])
        
            fetchRecordsOp.fetchRecordsCompletionBlock = { recordsByRecordID, error in
                guard error == nil, let share = recordsByRecordID?[shareRecordID] as? CKShare  else {
                    if let ckerror = error as? CKError {
                        self.aErrorHandler.handleCkError(ckerror: ckerror)
                        //self.saveToCloudKitStatus(recordName: myRecordName, success: false)
                    }
                    completion(false)
                    return
                }
               
                DispatchQueue.main.async {
                    let sharingController = UICloudSharingController(share: share, container: self.defaultContainer!)
                    completion(true)
                    //completionHandler(sharingController)
                }
            }
            self.privateDB?.add(fetchRecordsOp)
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-03-27 06:31:34

这可能有点晚了,但我在使用NSPersistentCloudKitContainer时也遇到了这个问题,问题似乎只是确保我在设置的功能部分中的iCloud容器名称与我的应用程序包名称匹配,即iCloud.com.goddamnyouryan.MyApp

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63662644

复制
相关文章

相似问题

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