Предупреждение macOS Swift QuickLook: setDelegate и setDataSource вызываются, когда на панели нет контроллера

Xcode 11, Swift 5.1

Я получаю пару предупреждений каждый раз, когда открываю файл и просматриваю его с помощью QuickLook (QL). Кажется, все работает нормально, но мне интересно, смогу ли я избавиться от предупреждений.

В предупреждениях говорится:

- [QLPreviewPanel setDelegate:] вызывается, пока на панели нет контроллера - Исправьте это, или это скоро появится.

- [QLPreviewPanel setDataSource:] вызывается, когда на панели нет контроллера - Исправьте это, или это скоро будет повышено.

Я установил и использую QL на NSTableCellView вот так:

import Quartz

class AttachmentCell: NSTableCellView, QLPreviewPanelDataSource, QLPreviewPanelDelegate{
  var quickLookItem:URL!

  @IBAction func clickPreview(_ sender: Any) {
    guard let panel = QLPreviewPanel.shared() else{ return }
    panel.delegate = self
    panel.dataSource = self
    panel.makeKeyAndOrderFront(self)
  }
  
  func numberOfPreviewItems(in panel: QLPreviewPanel!) -> Int {
    return 1
  }

  func previewPanel(_ panel: QLPreviewPanel!, previewItemAt index: Int) -> QLPreviewItem! {
    quickLookItem = URL(fileURLWithPath: "...").appendingPathExtension(...)
    return quickLookItem as QLPreviewItem
  }
}

Метод clickPreview находится на NSButton, который у меня есть в ячейке таблицы. Ближайшее, что я смог найти, было это, но я не понимаю, как задействована цепочка респондентов: QLPreviewPanel в tableview с проблемой: нет контроллера

Я также попытался вместо этого настроить свои методы делегата на моем NSViewController, но появилось то же предупреждение.

Есть идеи, как это решить? Или я могу спокойно игнорировать это?


person Clifton Labrum    schedule 10.10.2019    source источник
comment
Спасибо за ваш ответ. Если я удалю panel.delegate и panel.dataSource из действия clickPreview и перенесу их в метод beginPreviewPanelControl, Quick Look больше не сможет найти изображение для предварительного просмотра: d.pr/i/wJtPIb   -  person Clifton Labrum    schedule 11.10.2019
comment
См. Связанный потребитель QuickLook в качестве делегата от NSViewController Комментарии к этому заголовку, особенно к acceptptsPreviewPanelControl: и методу updateController экземпляра QLPreviewPanel, предполагают, что контроллер панели, если он есть, является объектом, который находится в цепочке респондентов. Следовательно, если ваш контроллер не становится контроллером панели, это потому, что ваш контроллер не входит в цепочку респондентов.   -  person Willeke    schedule 12.10.2019