Добавление 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
,