我正在尝试通过QuickLook框架打开PDF,而不使用UIScrollView ...
我相信我想念的东西...
我认为我做错了,我需要使用QLPreviewController,并且在QLPreviewController上是一个必须符合QLPreviewItem的数据源。该文档指出NSURL确实符合QLPriewItem,因此我将Preview.dataSource设置为抛出错误的NSURL:
[NSURL numberOfPreviewItemsInPreviewController:]:无法识别的选择器已发送到实例
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[[NSURL numberOfPreviewItemsInPreviewController:]:无法识别的选择器发送到实例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];
}
最佳答案
最后,我只是创建了另一个类来保存我的值并用作数据源,这有点麻烦又肮脏,但是它可以工作。
//
// 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