2017-01-15 4 views
0

Ich erstelle derzeit eine winzige open source app, um eine Vorschau in der neuen Touch Bar anzuzeigen. Ich habe ein Fenster mit einer Drag & Drop-Ansicht, um Bilder über seine URL zu erhalten. Und eine IB Touch Bar mit einem NSMageView in einem TouchBarView.
interface builder structure (screenshot)Ein NSMageView in NSTouchBar auffüllen

Dies ist in meinem MainViewController arbeitet das Bild im Fenster anzuzeigen:

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

} 

Wie Sie verwende ich einen Delegaten sehen kann die Drag n Drop-Ereignisse zu hören, um die Bild-URL zu erhalten. Jetzt möchte ich das Bild/URL verwenden, um das gleiche Bild in der Touchbar zu zeigen. Ich habe die Touch Bar mit Interface Builder erstellt und übergebe die Bild-URL an die WindowController.

In meinem WindowController ich versuche, das Bild so zu handhaben:

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

Ich erhalte die korrekte URL mit print(url), aber wenn ich versuche, das Bild erneut zu erstellen, die App mit dem folgenden abstürzt Nachricht:

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

Überprüfen Sie, ob _touchBarImageView_ kein Null ist. Rufen Sie _showImageInTouchBar_ nicht vor dem Laden des Controllers auf? –

+0

Ahh guter Hinweis! Vielen Dank! Das 'touchBarImageView' ist in der Tat null. ** Aber warum? ** Wenn ich ImageView in meinem 'MainViewController' bevölke, muss ich nichts machen. Und nein, sorry, ich rufe 'showImageInTouchBar()' nach dem 'windowDidLoad()' auf. – alexkaessner

+0

Können Sie einen Commit mit Ihrem aktuellen Code zu einem separaten Zweig machen? –

Antwort

0

Ich erstellte eine Pull-Anfrage mit einem Fix. Mit dem Regler geschaffen und vom NSWindow

Ihr Problem war, dass Sie einen neuen WindowController und mit diesem als Referenz stattdessen wurden die Schaffung.

Ergebnis:

enter image description here

Verwandte Themen