Отображение PDF с UIWebView не работает - PullRequest
2 голосов
/ 07 марта 2012

Итак, я понимаю, что было много вопросов относительно использования UIWebView для отображения PDF в приложении (на iPad). Я просмотрел все, что смог найти, но не могу найти удовлетворения.

То, что я пытаюсь сделать, очень просто, поэтому я действительно не знаю, почему это не работает. Все, что мне нужно сделать, это отобразить локально сохраненный PDF-файл в UIWebView. По сути, все, что я получаю, это черный экран. Если бы кто-то мог взглянуть на мой код, я был бы очень благодарен. Спасибо.

   - (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 в предыдущей сцене. Это или использовать другой метод, как кварц. Но я бы предпочел использовать UIWebView, поскольку все, что мне действительно нужно, это отображать и разрешать прокрутку.

Ответы [ 3 ]

3 голосов
/ 25 ноября 2012

DiskImageCache: не удалось разрешить абсолютный путь старого каталог.

Это не настоящая причина сбоя приложения. Это предупреждение можно исправить, назначив представление в раскадровке. Кажется, он уже подключен, но он серый. Так что назначьте его снова, и все будет хорошо.

Реальная проблема для меня заключалась в том, что изображения в формате PDF имели разрешение 300 DPI и загрузка приложения заняла слишком много времени. Поскольку отладчик предотвращает сбой приложения, кажется, что он работает нормально, но загрузка без отладчика займет слишком много времени и приведет к аварийному завершению.

Есть несколько вещей, которые вы можете сделать. Вы можете уменьшить свой PDF, что может быть хорошо, так как старое устройство работает медленнее, и его тоже приятно поддерживать. Но то, что действительно исправляет это, задерживает инициализацию PageView. Вот что я сделал:

В RootViewController я переместил код из viewDidLoad в новую функцию setupPageViewer.

И поместите это в viewDidLoad:

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

Задержка 0.0 означает, что она будет учтена в следующем кадре, что дает вам возможность показать индикатор загрузки.

Наслаждайтесь!

1 голос
/ 08 марта 2012

я не уверен в том, что происходит .. вы просматриваете и webView оба держите нулевое значение ... как я уже говорил, я еще не вовлечен в storyBoard ... но вы, как обходное решение, возможно, это решит вашу проблему

    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];
0 голосов
/ 11 июля 2012

В качестве обходного пути вы можете отключить или удалить точку останова «Все исключения». Это может сделать отладку немного более сложной, но это не так плохо, как необходимость повторного запуска приложения.

enter image description here

Это точка останова, вызывающая проблему. Я установил это так давно, что забыл, что это было там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...