0

UIScrollView を使用せずに QuickLook フレームワーク経由で PDF を開こうとしています...

私は何かが欠けていると信じています...

私が間違っていると思うところは、QLPreviewController を使用する必要があり、QLPreviewController には QLPreviewItem に準拠する必要がある dataSource があるということです。ドキュメントには、NSURL が QLPriewItem に準拠していると記載されているため、エラーをスローしている NSURL に preview.dataSource を設定しています。

[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 に答える