2017-01-15 5 views
0

現在、新しいタッチバーの内部をプレビューするために、小さなopen source appを作成しています。 私はドラッグアンドドロップビューを持つウィンドウを持って、そのURLを介して画像を受け取ります。 TouchBarViewの中にNSImageViewを持つIBタッチバー。
interface builder structure (screenshot)NSTouchBar内にNSImageViewを挿入する

これがウィンドウに画像を表示するために、私のMainViewControllerで働いている:あなたは、私はドラッグを聴くn個の画像のURLを取得するには、イベントを削除するには、デリゲートを使用して見ることができるように

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を使用したいと思います。 Interface BuilderでTouch Barを作成しましたが、image-urlを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 
     } 
    } 
} 

私はprint(url)で正しいURLを受けるんだけど、私は再び画像を作成しようとすると、アプリは以下にクラッシュされています。私のWindowController

は、私はこのような画像を処理しようとしますメッセージ:

fatal error: unexpectedly found nil while unwrapping an Optional value 
+0

_touchBarImageView_がnilでないか確認してください。コントローラがロードされる前に_showImageInTouchBar_を呼び出していませんか? –

+0

ああ良いヒント!ありがとう! 'touchBarImageView'は実際にはゼロです。 **しかし、なぜですか?**私がImageViewを 'MainViewController'に入れたとしても何もする必要はありません。申し訳ありませんが、私は 'showImageInTouchBar()'を 'windowDidLoad()'の後に呼び出しています。 – alexkaessner

+0

分岐を区切るために現在のコードでコミットできますか? –

答えて

0

修正プログラムを使用してプルリクエストを作成しました。

あなたの問題は、あなたが新しいWindowControllerを作成し、代わりにNSWindowのによって作成され、使用されるコントローラを使用して、参照としてこれを使用していたということでした。

結果:

enter image description here

関連する問題