iOS – 通过Quicklook打开PDF,而不使用UIScrollView

我试图通过QuickLook框架打开一个PDF,而不使用UIScrollView …

我相信我错过了一些东西

我相信我会错误的是,我需要使用QLPreviewController,并在QLPreviewController是一个数据源,必须符合QLPreviewItem。 该文档指出,NSURL确实符合QLPriewItem,所以我将preview.dataSource设置为引发错误的NSURL:

[NSURL numberOfPreviewItemsInPreviewController:]:无法识别的select器发送到实例

终止由于未捕获exception“NSInvalidArgumentException”的应用程序,原因:' – [NSURL numberOfPreviewItemsInPreviewController:]:无法识别的select器发送到实例0x5b5f200'

这使我认为NSURL不符合。

我认为所有的代码是必要的…

- (BOOL)previewController:(QLPreviewController *)controller shouldOpenURL:(NSURL *)url forPreviewItem:(id <QLPreviewItem>)item { return YES; } - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return [documents count]; } - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index { return [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[documents objectAtIndex:index] ofType:nil]]; } - (void)pushPDF { QLPreviewController *preview = [[QLPreviewController alloc] init]; preview.dataSource = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MCIT_Quiz" ofType:@"pdf"]]; //preview.currentPreviewItemIndex = 0; [self presentModalViewController:preview animated:YES]; [preview release]; } 

那么,我没有看到一个NSURL符合QLPreviewControllerDataSource。 我想你想要

  preview.dataSource = self; 

然后你已经编写的例程(numberOfPreviewItemsInPreviewController和previewController)将返回适当的NSURL(虽然不清楚“文档”如何填充)。

我最终创build了另一个类来保存我的值,并作为一个数据源使用,有点快而肮脏,但它的工作原理。

 // // documentList.h // #import <Foundation/Foundation.h> #import <QuickLook/QuickLook.h> @interface DocumentList : NSObject <QLPreviewControllerDataSource, QLPreviewControllerDelegate> { NSArray *documents; } @property (nonatomic, retain) NSArray *documents; -(void)createList; -(NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller; - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index; @end 

插入文本来分解文件

 // // documentList.m // #import "DocumentList.h" @implementation DocumentList @synthesize documents; -(void) createList { documents = [[NSArray arrayWithObjects:@"Quiz.pdf", nil] retain]; } -(NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return [documents count]; } - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index { return [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[documents objectAtIndex:index] ofType:nil]]; } @end