用UIWebView显示PDF不工作

所以,我意识到在使用UIWebView在应用程序中显示PDF(在iPad上)方面存在很多问题。 我已经检查了我能find的所有东西,但我似乎无法find任何满意的结果。

我想要做的是非常基本的,所以我真的不知道为什么它不工作。 我所需要做的就是在UIWebView中显示本地存储的PDF。 从本质上讲,我所得到的只是一个黑屏。 如果有人可以看看我的代码,我真的很感激。 谢谢。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Segue to the materials screen. if ([segue.identifier isEqualToString:@"materials"]) { PDFViewController *pdfViewController = [segue destinationViewController]; NSIndexPath *path = [self.tableView indexPathForSelectedRow]; int row = [path row]; Lesson *selected = [purchasedLessons objectAtIndex:row]; pdfViewController.selectedLesson = selected ; //Start Load PDF in UIWebView pdfViewController.pdfWindowTitle.title = selected.titleAndSubtitle; pdfViewController.pdfWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 704)]; NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"moonlightSonataFirstMovement" ofType:@"pdf"]; NSURL *url = [NSURL fileURLWithPath:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [pdfViewController.pdfWebView loadRequest:requestObj]; //End Load PDF } } 

我已经检查过我的对象是否被正确地传递到了场景中,而且如果我得到了正确的请求, 我越来越:

<NSURLRequest file://localhost/Users/MYCOMPUTER/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/AB161E57-D942-44C2-AA75-030087820BED/iLessons%20Piano.app/moonlightSonataFirstMovement.pdf>

另外,我有这个错误消息:

 iLessons Piano[23080:f803] DiskImageCache: Could not resolve the absolute path of the old directory. 

此外,出于某种原因,NSLog消息被打印出来8次。

我能想到的唯一的事情是,当我在前一个场景中调用prepareForSegue函数时,我需要进行这个加载。 这或使用像Quartz的不同的方法。 但我宁愿使用UIWebView,因为我真的需要做的是显示和允许滚动。

即时通讯不知道怎么回事..你查看和webView都举行无价值..正如我告诉你,即时通讯不参与storyBoard然而..但你作为一种解决方法的解决scheme也许这解决了你的问题

  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1027, 768)]; pdfViewController.view = view; pdfViewController.pdfWebView = [[UIWebView alloc] initWithFrame:pdfViewController.view.frame]; NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"moonlightSonataFirstMovement" ofType:@"pdf"]; NSURL *url = [NSURL fileURLWithPath:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [pdfViewController.view addSubview:pdfViewController.pdfWebView]; [pdfViewController.pdfWebView loadRequest:requestObj]; 

DiskImageCache:无法parsing旧目录的绝对path。

这一个不是应用程序崩溃的真正原因。 此警告可以通过分配故事板中的视图来解决。 它似乎已经连接,但它是灰色的。 所以再次分配,这将是很好的。

对我来说真正的问题是PDF图像是300 DPI,加载应用程序花了太长时间。 由于debugging器保持应用程序崩溃似乎工作正常,但加载将需要太久没有debugging器,并会导致超时崩溃。

有几件事你可以做。 您可以缩小您的PDF,这可能是一件好事,因为旧设备甚至更慢,支持这些也是很好的。 但是真正解决的是通过延迟PageView初始化。 以下是我所做的:

在RootViewController中,我将代码从viewDidLoad移到了一个新的函数setupPageViewer

把这个放在viewDidLoad

[self performSelector:@selector(setupPageViewer)withObject:nil afterDelay:0.0f];

延迟0.0意味着它将在下一个框架中被照顾,使您有机会显示负载指示器。

请享用!

作为解决方法,您可以禁用或删除您的“所有exception”断点。 这可能会使debugging变得更加困难,但这并不像必须重新启动应用程序一样糟糕。

在这里输入图像说明

这是导致问题的断点。 我很早以前就已经把它忘记了,我忘记了它在那里