2

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

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

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

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

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

你可以帮帮我吗 ?谢谢你。

4

2 回答 2

1

添加我自己的答案,因为我遇到了类似的问题,并且在我寻找解决方案时出现了这个问题。我遇到的问题是 pdf 可以在模拟器中打开,但是当我尝试在设备上打开时,它只会显示一个带有 pdf 标题的空白 pdf 页面。我收到一条错误消息,如“无法为路径发出文件扩展名”。

但是,这是我发现的:

直接从捆绑包中生成我的 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

于 2018-01-29T18:44:49.740 回答
0

这似乎是我的 iPad 上的一个错误,在 2 次重新启动后,问题似乎得到了解决

于 2018-01-22T09:00:34.117 回答