0

我正在尝试通过 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];
}
4

2 回答 2

2

我最终只是创建了另一个类来保存我的值并用作数据源,有点快速和肮脏,但它有效。

//
//  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
于 2011-04-28T19:01:35.997 回答
1

好吧,我看不出 NSURL 在哪里符合 QLPreviewControllerDataSource。我想你想要

 preview.dataSource = self;

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

于 2011-04-28T14:00:06.430 回答