0

我目前正在创建一个小型开源应用程序来预览新的 Touch Bar 内部。我有一个带有拖放视图的窗口,可以通过它的 URL 接收图像。还有一个带有 NSImageView 的 IB Touch Bar 在 TouchBarView 中。
界面构建器结构(截图)

这在我的工作中MainViewController可以在窗口中显示图像:

extension ViewController: DropDestinationViewDelegate {

    func processImageURLs(_ urls: [URL]) {
        for (_,url) in urls.enumerated() {

            // pass URL to Window Controller
            let windowController = WindowController()
            windowController.showImageInTouchBar(url)

            // create the image from the content URL
            if let image = NSImage(contentsOf:url) {

                imagePreviewView.image = image
            }
        }
    }

}

如您所见,我使用委托来监听拖放事件以获取图像 URL。现在我想使用图像/URL 在触控栏中显示相同的图像。我已经使用 Interface Builder 创建了 Touch Bar,并将图像 URL 传递给WindowController.

在我的WindowController我尝试像这样处理图像:

class WindowController: NSWindowController {

    @IBOutlet var touchBarImageView: NSImageView!

    override func windowDidLoad() {
        super.windowDidLoad()
    }

    func showImageInTouchBar(_ url: URL) {
        print(url)

        if let touchbarImage = NSImage(contentsOf:url) {
            touchBarImageView.image = touchbarImage
        }
    }
}

我收到了正确的 URL print(url),但是当我尝试再次创建图像时,应用程序崩溃并显示以下消息:

fatal error: unexpectedly found nil while unwrapping an Optional value
4

1 回答 1

0

我创建了一个带有修复的拉取请求。

您的问题是您正在创建一个新的WindowController并将其用作参考,而不是使用由NSWindow创建和使用的控制器。

结果:

在此处输入图像描述

于 2017-01-15T18:58:42.390 回答