11

在 iOS 6 中,QLPreviewController 不再从 URL 加载 PDF。它在 iOS 5 中运行良好。我已经实现了 QLPreviewControllerDataSource 方法,如此所述。

#pragma mark - QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}

- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index;
{
    NSURL *fileURL = [NSURL URLWithString:@"http://www.bliley.net/XTAL/PDF_Instructions/Test_File.pdf"];
    return fileURL;
}

这在 iOS 5 中完美运行,但在 iOS 6 中控制台输出:

Couldn't issue file extension for path: /XTAL/PDF_Instructions/Test_File.pdf
4

4 回答 4

8

您是否尝试过使用 fileURLWithPath 而不是 URLWithString?我有其他问题通过这样做得到解决。

也不确定 QLPreviewController 是否会处理远程 URL。如果没有,您可以下载文件然后显示它。

于 2012-10-08T15:11:47.310 回答
7

我从远程 url 下载文件并保存在本地,然后使用 QLPreviewController 显示 PDF。在 iOS 6 中它可以工作。

首先,我使用以下代码从远程 url 保存文件:

    NSString *local_location;

    NSString *path = [[NSBundle mainBundle] pathForResource:@"sampleData" ofType:@"plist"];
        path = NSTemporaryDirectory();
    local_location= [path stringByAppendingPathComponent:[NSString stringWithFormat:@"My_Invoice.pdf"]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString: remoteurl]];
        [request setDownloadDestinationPath:local_location];
        [request startSynchronous];

为了显示 Pdf :

QLPreviewController* preview = [[QLPreviewController alloc] init];
        preview.dataSource = self;
        [self presentModalViewController:preview animated:YES];

QLPreviewController 委托方法是:

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
    return 1;
}

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{

    return [NSURL fileURLWithPath:local_location];


}
于 2012-12-13T13:05:57.247 回答
4

我遇到了类似的问题,似乎它可能源于对 QLPreviewItem 的文件类型 URL 的更严格执行

@property (readonly) NSURL *previewItemURL;
Discussion
This property is used by a Quick Look preview controller to get an item’s URL. In typical use, you would implement a getter method in your preview item class to provide this value.

The value of this property must be a file-type URL.

If the item is not available for preview, this property’s getter method should return nil. In this case, the Quick Look preview controller displays a “loading” view.

Availability
Available in iOS 4.0 and later.
Declared In
QLPreviewItem.h

更新:我已经向 Apple 提出了一个针对 iOS 6 处理此问题的错误,并且似乎他们已将其视为错误,因此可能会在不久的将来提供修复。我打开的错误与使用自定义 NSURLProtocols 进行预览有关,但也可能适用于其他方面。

链接到课堂

于 2012-10-09T15:23:12.190 回答
0

但请注意 QLPreviewController 需要一个指向本地资源的 URL

您需要先在本地下载并保存 PDF 文件,然后为本地文件创建适当的文件 URL。

于 2017-11-07T06:10:45.153 回答