gpt4 book ai didi

swift - 尝试预览文件时无法让 QuickLook 工作

转载 作者:行者123 更新时间:2023-11-28 07:22:11 25 4
gpt4 key购买 nike

我正在使用 Storyboard使用 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 和 Storyboard的情况调整上述帖子的解决方案。

主要部分是:

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
}
}

无论是否干扰响应链,我都会收到错误消息。委托(delegate)函数也都按预期被调用。

最佳答案

移除

qlPanel!.delegate = self
qlPanel!.dataSource = self

quickLookButtonAction 中,viewcontroller 还没有控制。等待 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: 的评论:

Sent to the object taking control of the Preview Panel.

The receiver should setup the preview panel (data source, delegate, binding, etc.) here.

关于swift - 尝试预览文件时无法让 QuickLook 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com