ios11 UIDocumentInteractionController presentPreviewAnimated 冻结应用程序

ios11 UIDocumentInteractionController presentPreviewAnimated freezes the app

我的 iPad 应用程序在 iOS11 上出现问题,当时我想使用以下代码显示 PDF 文件的预览:

self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:urlPathToDocument]];
[self.documentInteractionController setDelegate:self];
[self.documentInteractionController presentPreviewAnimated:YES];

此应用程序冻结,我必须终止该应用程序,她没有崩溃,也没有显示任何错误。

在 iOS10 上,没问题,PDF 文件的预览可以完美显示,不会冻结应用程序。

我试图将这段代码放在一个 dispatch_async 块中,但没有改变。

你能帮帮我吗? 谢谢。

好像是我的iPad的bug,重启2次后,问题好像解决了

添加我自己的答案,因为我 运行 遇到过类似的问题,这个问题是我在寻找解决方案时遇到的。我遇到的问题是 pdf 可以在模拟器中正常打开,但是当我尝试在设备上打开时,它只会显示一个带有 pdf 标题的空白 pdf 页面。我收到类似 "Couldn't issue file extension for path."

的错误消息

然而,这是我发现的:

直接从包中生成我的 url 适用于模拟器但不适用于设备

// This was not working on device, but did work with simulator  
let fileURL = Bundle.main.url(forResource: "SomePDF", withExtension: "pdf")!
self.docVC = UIDocumentInteractionController(url: fileURL)
self.docVC.delegate = self
self.docVC.presentPreview(animated: true)

因此,为了看看会发生什么,我采用了相同的 url,将其转换为数据并使用新的 url 保存到一个临时目录中。这最终奏效了:

// Now it opens correctly on both simulator and device 
let url = Bundle.main.url(forResource: "SomePDF", withExtension: "pdf")!
let pdfData = try! Data(contentsOf: url)
let temp = NSTemporaryDirectory()
let fileURL = URL(fileURLWithPath: temp).appendingPathComponent("SomePDF.pdf")
try! pdfData.write(to: fileURL)
self.docVC = UIDocumentInteractionController(url: fileURL)
self.docVC.delegate = self
self.docVC.presentPreview(animated: true)

希望这可以帮助其他人 运行 解决这个问题。正在使用 iPhone X iOS 11.2.1