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 中显示无限活动指示