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
Überprüfen Sie, ob _touchBarImageView_ kein Null ist. Rufen Sie _showImageInTouchBar_ nicht vor dem Laden des Controllers auf? –
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
Können Sie einen Commit mit Ihrem aktuellen Code zu einem separaten Zweig machen? –