将QLPreviewController添加为子视图不会加载PDF

时间:2011-11-07 22:08:45

标签: objective-c ios quicklook

我正在尝试将QLPreviewController的视图添加为子视图(不 - 我不能使用导航控制器或模态)。它只显示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说它可以打开文件,但实际上并没有。我只是得到了背景。在创建QLPreviewController之前设置了self.currentPDF并确实包含了正确的信息(来自CoreData)。

委托方法永远不会被调用。但我也没有以标准方式使用它,所以这并非完全出乎意料。

我也尝试过调用[preview setNeedsLayout][preview setNeedsDisplay'][preview refreshCurrentPreviewItem],但那些只是调用数据源方法而不会更改任何内容。

PDF有效。我可以在Xcode和Preview中打开它们,所以这不是问题所在。我有点难过为什么这不起作用。任何帮助都将得到赞赏,让这个工作。

1 个答案:

答案 0 :(得分:3)

原来我发送了QLPreviewController错误的路径。它没有正确找到包中的PDF。我需要使用pathForResource:ofType:inDirectory