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

时间:2015-01-06 03:52:37

标签: objective-c

好的,我在这里烧了一点头。

我只是想保存一个在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文件时,应用程序崩溃说网址路径为零:

  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];

关于我做错的任何想法?

由于

1 个答案:

答案 0 :(得分:3)

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

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

您的第二个片段可能看起来更像:

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

或者,如果它都在同一个方法中发生,那么只需重新使用之前构建它的filePath