tableview中的QLPreviewPanel有问题:"没有控制器"

时间:2015-02-08 20:35:48

标签: objective-c cocoa nsviewcontroller quicklook qlpreviewcontroller

我想在QLPreviewPanel中的表格视图中显示网址但我收到此错误:

  

[QL] QLError(): - 面板调用[QLPreviewPanel reloadData]   没有控制器 - 解决这个问题,否则很快就会出现这种情况。

我的表控制器已经符合这两个协议:QLPreviewPanelDataSource,QLPreviewPanelDelegate。

如何将[QLPreviewPanel sharedPreviewPanel]的控制器设置为我的表格控制器?

- (void)didPressSpacebarForTableView:(NSTableView *)tableView {
    NSLog(@"Spacebar clicked");
    if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) {
        [[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
    } else {
        [[QLPreviewPanel sharedPreviewPanel] reloadData];
        [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
    }
}

- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel {
    return [[(PasteboardItem *)[[_arrayController arrangedObjects] objectAtIndex:[_tableView selectedRow]] filenames] count];
}


- (id<QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index {
    NSString *path = [(PasteboardItem *)[[_arrayController arrangedObjects] objectAtIndex:[_tableView selectedRow]] filenames][index];
    NSURL *url = [NSURL fileURLWithPath:path];
    return url;
}

- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel {
    return YES;
}

-(void)beginPreviewPanelControl:(QLPreviewPanel *)panel {
    panel.dataSource = self;
    panel.delegate = self;
}

- (void)endPreviewPanelControl:(QLPreviewPanel *)panel {
    panel.dataSource = nil;
    panel.delegate = nil;
}

1 个答案:

答案 0 :(得分:1)

我在这里找到了解决方案:QuickLook consumer as a delegate from an NSViewController。在我的情况下,我需要面板控制器(NSWindowController)中的这3行代码,其中我有我的表视图控制器的实例。

- (void)awakeFromNib { 
    NSResponder * aNextResponder = [self nextResponder];
    [self setNextResponder:_tableController];
    [_tableController setNextResponder:aNextResponder];
}