UICloudSharingController

UICloudSharingController

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

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>) {

    }
}

最佳答案

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

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

简而言之,该解决方案包括一个 View Controller 包装器,该包装器包含一个UICloudSharingController实例作为 subview Controller 。
UICloudSharingController有两种初始化方法:一种是在没有CKShare的情况下初始化的;另一种是已经将CKShare推送到CloudKit的方法。我观察到前一个初始化器提供了一个永无止境的 Activity 指示器。所以我做了什么,我没有参与者的情况下手动推送了共享,然后将空共享提供给第二个初始化的UICloudSharingController

这就是包装 Controller 应具有以下行的原因:

var share: CKShare? = nil

关于controller - UICloudSharingController在Xcode 11中显示无限事件指示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57310673/

10-14 23:20