5

ここでの使用に関するチュートリアルに非常に感謝してQLPreviewController います。

このコードをアプリケーションに実装しようとしています.ResourcesフォルダーではなくアプリのDocumentsフォルダーからファイルを表示するように変更しています(ユーザーがiTunesファイル共有を使用してドキュメントを管理できるようにするため)。ただし、そうすると「EXC_BAD_ACCESS」エラーが発生しました。

Documents フォルダーにファイルの配列を作成して、テーブルビュー リストを生成します。

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsPath = [paths objectAtIndex:0];

arrayOfDocuments = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:NULL];
}

このように Documents フォルダからファイルのリストを表示しても問題ありません。

QuickLook を使用してリストから選択したファイルを表示するコードは次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
// When user taps a row, create the preview controller
QLPreviewController *previewer = [[[QLPreviewController alloc] init] autorelease];

// Set data source
[previewer setDataSource:self];

    // Which item to preview
[previewer setCurrentPreviewItemIndex:indexPath.row];

// Push new viewcontroller, previewing the document
[[self navigationController] pushViewController:previewer animated:YES];
}


- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller 
{
return [arrayOfDocuments count];
}


- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index 
{
// Break the path into it's components (filename and extension)
NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];

// Use the filename (index 0) and the extension (index 1) to get path
NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1] inDirectory: @"Documents"];

return [NSURL fileURLWithPath:path];
}

このコードを実行すると、次EXC_BAD_ACCESSの行にエラーが表示されます。

[previewer setDataSource:self];

どんな助けでも大歓迎です。前もって感謝します。

4

0 に答える 0