从 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
。
好吧,我有点头疼了。
我只是想保存在 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
。