带有iOS 11.1.2的iphoneX上的UIDocumentInteractionController

时间:2017-12-18 11:45:22

标签: ios

当我在iOS 11.1.2的iphoneX上使用UIDocumentInteractionController时,它没有显示,并以下列方式登录控制台:

[ShareSheet] ERROR: <_UIDICActivityViewController: 0x107075c00> timed out waiting to establish a connection to the ShareUI view service extension.

但是相同的代码在iOS 11.1.2的其他设备上运行正常,只有iphoneX无法预览documentInteraction菜单。我的代码有问题吗?如果找到解决方案,请告诉我。

我的代码:

    var doc: UIDocumentInteractionController?

fileprivate func openWithOtherApp(with url: URL) -> Void {
    let doc = UIDocumentInteractionController(url: url)
    self.doc = doc
    doc.delegate = self
    DispatchQueue.main.async { [weak self] in
        guard let weakSelf = self else {
            return
        }
        if weakSelf.doc?.presentOpenInMenu(from: weakSelf.view.bounds, in: weakSelf.view, animated: true) != true {
            Toast(message: "No app on you iPhone can open this file.")
        }
    }
}

委托:

  extension UniversalPreviewController: UIDocumentInteractionControllerDelegate {

        func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
            return self
        }

        func documentInteractionControllerRectForPreview(_ controller: UIDocumentInteractionController) -> CGRect {
            return self.view.bounds
        }

        func documentInteractionControllerViewForPreview(_ controller: UIDocumentInteractionController) -> UIView? {
            return self.view
        }

        func documentInteractionControllerWillBeginPreview(_ controller: UIDocumentInteractionController) {
            NSLog("documentInteractionControllerWillBeginPreview")
        }

        func documentInteractionControllerDidEndPreview(_ controller: UIDocumentInteractionController) {
            self.doc = nil
        }
    }

我的最新测试:

当我使用永久文件URL(将文件拖到项目文件列表中)时,它可以工作。

  let permanentUrl = Bundle.main.url(forResource: "INBOX24-2.2-resolv", withExtension: "conf")
  self.doc = UIDocumentInteractionController.init(url: permanentUrl!)
  //permanentUrl:file:///var/containers/Bundle/Application/40F14112-208E-4A97-8214-D55CC8E597C4/xxx.app/INBOX24-2.2-resolv.conf

但是,当我更改到应用程序文档目录中的文件存储的真实代码时,它不起作用,代码如下:

let url = URL.init(fileURLWithPath: storedPath
self.doc = UIDocumentInteractionController.init(url: url)
//url:file:///var/mobile/Containers/Data/Application/9624FFB3-8CB0-437C-A67B-C71AAB314370/Documents/INBOX24-2.2-resolv.conf

1 个答案:

答案 0 :(得分:0)

我在iPhone上发现了同样的问题,我刚刚重新启动了我的iPhone并且已经解决了。