尝试预览文件时无法使QuickLook正常工作 [英] Can't get QuickLook to work when trying to preview files
问题描述
我正在使用故事板用Swift编写macOS应用程序.我有一个NSTableView,其中包含我希望用户能够通过QuickLook预览的文件.
I am writing a macOS application with Swift using story boards. I have a NSTableView which contains files that I want the user to be able to preview via QuickLook.
我似乎已准备好所有内容,并且我的代码与此处描述的代码非常相似:
I seemingly have everything in place and my code looks very similar to what has been described here: QuickLook consumer as a delegate from an NSViewController, but I keep getting the error
-[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和故事板上的情况来调整以上帖子的解决方案.
I've been trying to adapt the solution of above post to my situation with Swift and story boards.
主要作品是:
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
}
}
无论响应者链是否混乱,我都会收到错误消息. 委托函数也都按预期被调用.
With or without messing with the responder chain I get the error. The delegate functions all get called as expected as well.
推荐答案
删除
qlPanel!.delegate = self
qlPanel!.dataSource = self
在quickLookButtonAction
中的
,该视图控制器尚未处于控制状态.等待beginPreviewPanelControl
.
来自currentController
的文档:
如果不控制预览面板的状态(其委托,数据源等),则永远不要更改它.
You should never change the preview panel’s state (its delegate, datasource, and so on) if you are not controlling it.
来自QLPreviewPanel.h中针对-beginPreviewPanelControl:
的注释:
From comments in QLPreviewPanel.h for -beginPreviewPanelControl:
:
发送到控制预览面板的对象.
Sent to the object taking control of the Preview Panel.
接收者应在此处设置预览面板(数据源,委托,绑定等).
The receiver should setup the preview panel (data source, delegate, binding, etc.) here.
这篇关于尝试预览文件时无法使QuickLook正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!