簡體   English   中英

嘗試預覽文件時無法讓 QuickLook 工作

[英]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

quickLookButtonActionquickLookButtonAction控制器尚未控制。 等待beginPreviewPanelControl

currentController的文檔中:

如果您不控制預覽面板的狀態(它的委托、數據源等),則永遠不要更改它。

來自 QLPreviewPanel.h 中-beginPreviewPanelControl:評論:

發送到控制預覽面板的對象。

接收方應在此處設置預覽面板(數據源、委托、綁定等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM