从 UIWebView 保存 PDF 并使用 UIDocumentInteractionController 打开它到 iBooks

Saving a PDF from UIWebView and opening it with UIDocumentInteractionController to iBooks

好吧,我有点头疼了。

我只是想保存在 UIWebView 中加载的 PDF 文件。

这是我的:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir   == NO)
{
    [[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}
NSString *filePath = [cachePath stringByAppendingPathComponent:@"MissaoPilotoPortuguese.pdf"];
NSData *pdfFile = [NSData dataWithContentsOfURL:webView.request.URL];
[pdfFile writeToFile:filePath atomically:YES];

但出于某种原因,当我调用它打开 PDF 文件时,应用程序崩溃并提示 url 路径为 nil:

  NSString *path = [[NSBundle mainBundle] pathForResource:@"MissaoPilotoPortuguese" ofType:@"pdf"];
NSURL *urls = [NSURL fileURLWithPath:path];


self.documentController = [UIDocumentInteractionController interactionControllerWithURL:urls];
documentController.delegate = self;

[documentController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

对我做错了什么有什么想法吗?

谢谢

在要保存的代码中,您通过询问缓存目录然后附加文件名来构造 URL。

然后,当您尝试在第二个片段中打开它时,您只需询问主包的目录——这与上面的目录不同。

你的第二个片段应该看起来更像:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
NSString *filePath = [cachePath stringByAppendingPathComponent:@"MissaoPilotoPortuguese.pdf"];
NSURL *urls = [NSURL fileURLWithPath:filePath];
...

或者,如果这一切都发生在同一个方法中,只需重复使用之前构建它时的 filePath