Objective c QLViewController在iOS 6中不工作

Objective c QLViewController在iOS 6中不工作,objective-c,ios6,qlpreviewcontroller,Objective C,Ios6,Qlpreviewcontroller,在iOS 6中,QLPreviewController不再从URL加载PDF。它在iOS 5中运行良好。我已经实现了所记录的QLViewController数据源方法 您是否尝试过使用fileURLWithPath而不是URLWithString?我还有其他问题,通过这样做可以解决 还不确定QLViewController是否将处理远程URL。如果没有,您可以下载该文件,然后显示它。我也遇到了类似的问题,似乎它可能源于对QLPreviewItem文件类型URL的更严格执行 @property (

在iOS 6中,QLPreviewController不再从URL加载PDF。它在iOS 5中运行良好。我已经实现了所记录的QLViewController数据源方法


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


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

我也遇到了类似的问题,似乎它可能源于对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
更新:我与苹果公司在处理iOS 6的这一问题时发现了一个漏洞,他们似乎将其视为一个漏洞,因此可能在不久的将来提供修复。我打开的bug与使用自定义NSURL协议进行预览有关,但也可能适用于其他方面。


我从远程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];
QLViewController委托方法包括:

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

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

    return [NSURL fileURLWithPath:local_location];


}
-(NSInteger)PreviewWitemsInPreviewController:(QLPreviewController*)控制器的PreviewWitemsInPreviewController编号
{
返回1;
}
-(id)previewController:(QLPreviewController*)控制器PreviewWitematindex:(NSInteger)索引
{
返回[NSURL fileURLWithPath:local_location];
}

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


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

实际上不需要使用本地文件URL吗?在我看来,您使用的是远程url,该部分之后的所有内容都出错。有人告诉我,在ios 6中,他们对该方法实施了更严格的检查,url大多数以“file://”开头,但我找不到任何文档。如果有人知道推荐人,请发帖。你找到解决办法了吗?如果是,请分享或接受答案。感谢文件WithPath修复了我的问题!谢谢我已经在App Store中有一个应用程序了。它在iOS 5中运行良好。但是它不再起作用了。我需要改变一切来让它工作?苹果的“升级”真是太棒了。只要我的两分钱:如果URL指向的文件不存在,你还会收到“无法为路径发布文件扩展名”错误。因此,如果下载该文件并向QLViewController提供错误的URL,则会出现相同的错误。你为什么要那样做?嗯,愚蠢的错误确实会发生…@Sébastienussbaumer我在我的项目中没有遇到这个错误。一旦检查你的路径。很抱歉,我并不是说这发生在你的项目中,只是说这发生在我的项目中,我想让其他读者知道检查文件是否存在是一个好主意:)苹果仍然没有更新,但能够找到一个使用UIWebView和覆盖urlprotocol来加载文件的方法
QLPreviewController* preview = [[QLPreviewController alloc] init];
        preview.dataSource = self;
        [self presentModalViewController:preview animated:YES];
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
    return 1;
}

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

    return [NSURL fileURLWithPath:local_location];


}