[英]Can't get QuickLook to work when trying to preview files
我正在使用故事板使用 Swift 编写 macOS 应用程序。 我有一个 NSTableView,其中包含我希望用户能够通过 QuickLook 预览的文件。
我似乎已经准备好了一切,我的代码看起来与这里描述的非常相似: QuickLook consumer as a delegate from an NSViewController ,但我不断收到错误
-[QLPreviewPanel setDataSource:] called while the panel has no controller - Fix this or this will raise soon.
See comments in QLPreviewPanel.h for -acceptsPreviewPanelControl:/-beginPreviewPanelControl:/-endPreviewPanelControl:.
我一直在尝试使用 Swift 和故事板使上述帖子的解决方案适应我的情况。
主要部分是:
import Quartz
class ViewController: NSViewController, QLPreviewPanelDataSource, QLPreviewPanelDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let windowNextResponder = self.view.window?.nextResponder
self.view.window?.nextResponder = self
self.nextResponder = windowNextResponder
}
// *** Quicklook stuff ***
@IBAction func quickLookButtonAction(_ sender: Any) {
guard qlPanel != nil else {
return
}
if qlPanel!.currentController == nil {
print ("No controller")
//qlPanel!.windowController = self.view.window?.windowController
// qlPanel!.updateController()
} else {
print (qlPanel!.currentController)
}
qlPanel!.delegate = self
qlPanel!.dataSource = self
qlPanel!.makeKeyAndOrderFront(self)
}
func numberOfPreviewItems(in panel: QLPreviewPanel!) -> Int {
return CSVarrayController.selectedObjects.count
}
func previewPanel(_ panel: QLPreviewPanel!, previewItemAt index: Int) -> QLPreviewItem! {
let file = CSVarrayController.selectedObjects[index] as! CSVfile
return file.url as NSURL
}
override func acceptsPreviewPanelControl(_ panel: QLPreviewPanel!) -> Bool {
return true
}
override func beginPreviewPanelControl(_ panel: QLPreviewPanel!) {
panel.dataSource = self
panel.delegate = self
}
override func endPreviewPanelControl(_ panel: QLPreviewPanel!) {
panel.dataSource = nil
panel.delegate = nil
}
}
无论是否弄乱响应者链,我都会收到错误消息。 委托函数也都按预期调用。
消除
qlPanel!.delegate = self
qlPanel!.dataSource = self
在quickLookButtonAction
, quickLookButtonAction
控制器尚未控制。 等待beginPreviewPanelControl
。
从currentController
的文档中:
如果您不控制预览面板的状态(它的委托、数据源等),则永远不要更改它。
来自 QLPreviewPanel.h 中-beginPreviewPanelControl:
评论:
发送到控制预览面板的对象。
接收方应在此处设置预览面板(数据源、委托、绑定等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.