表格检视中的QLPreviewPanel问题:「没有控制器」 [英] QLPreviewPanel in tableview with issue: "has no controller"

查看:231
本文介绍了表格检视中的QLPreviewPanel问题:「没有控制器」的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在QLPreviewPanel中的表视图中显示URL,但出现此错误:

I would like to display the urls from a table view in a QLPreviewPanel but i got this error:

[QL] QLError():-[QLPreviewPanel reloadData]在面板上被调用 没有控制器-修正此问题,否则将很快出现.

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

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

My table controller already conform to this two protocols : QLPreviewPanelDataSource, QLPreviewPanelDelegate.

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

How can i set the controller of [QLPreviewPanel sharedPreviewPanel] as my table controller?

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

推荐答案

我在这里找到了解决方案:

I found the solution here: QuickLook consumer as a delegate from an NSViewController. In my case i need these 3 lines of code in the panel controller (NSWindowController) where i have the instance of my table view controller.

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

这篇关于表格检视中的QLPreviewPanel问题:「没有控制器」的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆