QLPreviewController无法在iOS 6中运行

ben*_*r75 11 objective-c qlpreviewcontroller ios6

在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;
}
Run Code Online (Sandbox Code Playgroud)

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

Couldn't issue file extension for path: /XTAL/PDF_Instructions/Test_File.pdf
Run Code Online (Sandbox Code Playgroud)

val*_*eru 8

您是否尝试过使用fileURLWithPath而不是URLWithString?通过这样做我还有其他问题.

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


Sur*_*esh 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];
Run Code Online (Sandbox Code Playgroud)

为了显示Pdf:

QLPreviewController* preview = [[QLPreviewController alloc] init];
        preview.dataSource = self;
        [self presentModalViewController:preview animated:YES];
Run Code Online (Sandbox Code Playgroud)

QLPreviewController委托方法是:

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

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

    return [NSURL fileURLWithPath:local_location];


}
Run Code Online (Sandbox Code Playgroud)

  • 只是我的两分钱:如果URL指向的文件不存在,您还会收到"无法为路径发出文件扩展名"错误.因此,如果您下载文件并向QLPreviewController提供错误的URL,您将收到同样的错误.为什么要这么做 ?好傻的虫子确实发生了...... (2认同)