表视图中的 QLPreviewPanel 有问题:"has no controller"

QLPreviewPanel in tableview with issue: "has no controller"

我想在 QLPreviewPanel 中显示来自 table 视图的 url,但出现此错误:

[QL] QLError(): -[QLPreviewPanel reloadData] called while the panel has no controller - Fix this or this will raise soon.

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

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

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

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

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