UICloudSharingController 在 Xcode 11 中显示无限活动指示

Posted

技术标签:

【中文标题】UICloudSharingController 在 Xcode 11 中显示无限活动指示【英文标题】:UICloudSharingController shows infinite activity indicatory in Xcode 11 【发布时间】:2019-08-01 13:53:42 【问题描述】:

我有以下代码将 UICloudSharingController 导入到 swift UI,但是当第一次集成时,它只显示一个永不停止的活动指示器,然后第二次显示(通过 .sheet),没有活动指示器.第一次向上我可以看到带有活动指示器的右上角的关闭按钮。对于任何反馈,我们都表示感谢。

struct CloudSharingController: UIViewControllerRepresentable 
    typealias UIViewControllerType = UICloudSharingController

    func makeCoordinator() -> Coordinator 
        Coordinator(self)
    

    class Coordinator: NSObject, UICloudSharingControllerDelegate 
        func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) 
            print("asdf")

        

        func itemTitle(for csc: UICloudSharingController) -> String? 
            return "item title for sharing TTT"
        

        var parent: CloudSharingController

        init(_ cloudSharingController: CloudSharingController) 
            self.parent = cloudSharingController
        
    


    var share: CKShare? = nil
    var container: CKContainer = CKContainer.default()

    var firsTimeBlock: ((UICloudSharingController, @escaping (CKShare?, CKContainer?, Error?) -> Void) -> Void)? = nil

    func makeUIViewController(context: UIViewControllerRepresentableContext<CloudSharingController>) -> CloudSharingController.UIViewControllerType 

        let result: UICloudSharingController!
        if let validFirstBlock = firsTimeBlock 
            return UICloudSharingController(preparationHandler: validFirstBlock)
         else if let validShare = self.share 
            return UICloudSharingController(share: validShare,
                                            container: container)
         else 
            fatalError()
        
        result.availablePermissions = [.allowReadWrite]
//        result.popoverPresentationController?.sourceView = AccountsView
        result.delegate = context.coordinator

        return result
    

    func updateUIViewController(_ uiViewController: CloudSharingController.UIViewControllerType, context: UIViewControllerRepresentableContext<CloudSharingController>) 

    

【问题讨论】:

Beta 5 中出现同样的问题。您在这方面有什么进展吗? 两件事,使用初始化器用于已经有共享记录的控制器,另一个用于没有共享时的初始化器不能正常工作。第二个将控制器包装到视图控制器中可表示并将共享控制器添加为子控制器, 【参考方案1】:

我找到了一个可以在这里找到的解决方法:

https://gist.github.com/arashkashi/bcffde1e35c7e406de52d9dff0127d41

简单的解决方案包括一个视图控制器包装器,其中包含一个UICloudSharingController 的实例作为子视图控制器。

UICloudSharingController 有两个已初始化,一个在没有 CKShare 时初始化,另一个在您已经将 CKShare 推送到 CloudKit 时初始化。我观察到前一个初始化程序提供了一个永无止境的活动指示器。所以我做了什么我手动推送没有参与者的共享,然后将空共享提供给UICloudSharingController的第二个初始化。

这就是包装控制器应该有这一行的原因:

var share: CKShare? = nil

【讨论】:

目前,我的工作只是在根窗口上显示它,但现在可能会好一些。 它在上面的要点链接上

以上是关于UICloudSharingController 在 Xcode 11 中显示无限活动指示的主要内容,如果未能解决你的问题,请参考以下文章

UICloudSharingController 在 Xcode 11 中显示无限活动指示

UICloudSharingController 不显示/不与 CloudKit 应用程序一起使用

无法共享 CloudKit CKShare 记录