• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用 UIWebView 显示 PDF 不工作

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:36:37 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

所以,我意识到有很多关于使用 UIWebView 在应用程序(在 iPad 上)中显示 PDF 的问题。我已经查看了我能找到的所有内容,但我似乎找不到任何满意的地方。

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

   - (void) prepareForSegueUIStoryboardSegue *)segue senderid)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

    }
}

我检查了我的对象是否被正确地传递到场景中(确实如此),以及我是否收到了正确的请求;我得到:

另外,我收到此错误消息:

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

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

我唯一能想到的是,我在上一个场景中调用 prepareForSegue 函数时需要做这个加载。或者使用其他方法,如 Quartz。但我宁愿使用 UIWebView,因为我真正需要做的就是显示并允许滚动。



Best Answer-推荐答案


DiskImageCache: Could not resolve the absolute path of the old directory.

这不是应用崩溃的真正原因。可以通过在 Storyboard 中分配 View 来修复此警告。它似乎已经连接,但它是灰色的。所以重新赋值就可以了。

对我来说真正的问题是 PDF 图像为 300 DPI,加载应用程序花费的时间太长。由于调试器可以防止应用程序崩溃,因此它似乎可以正常工作,但是如果没有调试器,加载将花费太长时间,并且会导致超时崩溃。

您可以做一些事情。您可以缩小 PDF 的比例,这可能是一件好事,因为旧设备速度更慢,而且支持这些设备也很好。但真正解决它的是延迟 PageView 初始化。这是我所做的:

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

并把它放在 viewDidLoad 中:

[self performSelectorselector(setupPageViewer) withObject:nil afterDelay:0.0f];

延迟 0.0 意味着它将在下一帧中处理,这使您有机会显示加载指示器。

享受吧!

关于ios - 使用 UIWebView 显示 PDF 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9606646/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap