QLPreviewPanel в tableview с проблемой: нет контроллера

Я хотел бы отображать URL-адреса из табличного представления в 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;
}

person Quang Nguyen    schedule 08.02.2015    source источник


Ответы (1)


Я нашел решение здесь: Потребитель QuickLook в качестве делегата от NSViewController. В моем случае мне нужны эти 3 строки кода в контроллере панели (NSWindowController), где у меня есть экземпляр моего контроллера табличного представления.

- (void)awakeFromNib { 
    NSResponder * aNextResponder = [self nextResponder];
    [self setNextResponder:_tableController];
    [_tableController setNextResponder:aNextResponder];
}
person Quang Nguyen    schedule 09.02.2015