Objective c QLViewController在iOS 6中不工作
在iOS 6中,QLPreviewController不再从URL加载PDF。它在iOS 5中运行良好。我已经实现了所记录的QLViewController数据源方法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 (
您是否尝试过使用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];
}