5

我非常感谢QLPreviewController 这里的使用教程。

我正在尝试将此代码实现到我的应用程序中,并修改以显示来自应用程序的 Documents 文件夹而不是 Resources 文件夹的文件(以便用户可以使用 iTunes 文件共享来管理文档)。但是,这样做我遇到了“ EXC_BAD_ACCESS”错误。

我在 Documents 文件夹中创建了一个文件数组来生成 tableview 列表:

- (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