Добавление QLPreviewController в качестве подпредставления не загружает PDF

Я пытаюсь добавить представление QLPreviewController в качестве подпредставления (нет - я не могу использовать контроллер Nav или модальный). Он показывает только фоновую структуру QLPreviewController.

Я создаю один и добавляю его как подпредставление:

QLPreviewController* preview = [[[QLPreviewController alloc] init] autorelease];
preview.dataSource = self;
preview.delegate = self;
preview.view.frame = CGRectMake(0, 0, self.pdfPreviewView.frame.size.width, self.pdfPreviewView.frame.size.height);
self.pdfPreviewView.previewController = preview;
[self.pdfPreviewView addSubview:preview.view];
[preview reloadData];

Мои методы QLPreviewControllerDataSource работают нормально (просматривая по 1 PDF за раз):

- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index
{
    NSString *path = [[ResourceManager defaultManager] pathForPDF:self.currentPDF];
    NSURL *url = [NSURL fileURLWithPath:path];

    if ([QLPreviewController canPreviewItem:url]) {
        return url; // This always returns
    }

    return nil; // This line is never executed
}
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
    return 1;
}

Метод источника данных всегда возвращает URL-адрес файла, и QLPreviewController говорит, что может открыть файл, но на самом деле этого не происходит. Я просто получаю фон. self.currentPDF устанавливается перед тем, как я создаю QLPreviewController, и содержит правильную информацию (из CoreData).

Методы делегата никогда не вызывают. Но я также не использую это стандартным способом, так что это не совсем неожиданно.

Я также пытался позвонить [preview setNeedsLayout], [preview setNeedsDisplay'], а также [preview refreshCurrentPreviewItem] но они просто вызывают методы источника данных и ничего не меняют.

PDF-файлы действительны. Я могу открыть их как в Xcode, так и в Preview, так что это не проблема. Я немного озадачен тем, почему это не сработает. Любая помощь будет оценена, чтобы заставить это работать.

1 ответ

Решение

Оказывается, я отправлял QLPreviewController по неверному пути. Не удалось найти PDF-файл в комплекте. Мне нужно было использовать pathForResource:ofType:inDirectory,

Другие вопросы по тегам