我想在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;
}
答案 0 :(得分:1)
我在这里找到了解决方案:QuickLook consumer as a delegate from an NSViewController。在我的情况下,我需要面板控制器(NSWindowController)中的这3行代码,其中我有我的表视图控制器的实例。
- (void)awakeFromNib {
NSResponder * aNextResponder = [self nextResponder];
[self setNextResponder:_tableController];
[_tableController setNextResponder:aNextResponder];
}