2017-01-15 11 views
0

В настоящее время я создаю крошечный open source app для предварительного просмотра внутренней панели Touch Bar. У меня есть окно с перетаскиванием n, чтобы получать изображения через его URL. И сенсорная панель IB с NSImageView внутри TouchBarView.
interface builder structure (screenshot)Заполнение NSImageView внутри NSTouchBar

Это работает в моих 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, и я передаю изображение-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 
+0

Проверьте _touchBarImageView_ не ноль. Вы не вызываете _showImageInTouchBar_ перед загрузкой контроллера? –

+0

Ах хороший намек! Благодаря! «TouchBarImageView» действительно ничто. ** Но почему? ** Если я заполню ImageView в моем «MainViewController», мне не нужно ничего делать. И не жалко, я вызываю 'showImageInTouchBar()' после 'windowDidLoad()'. – alexkaessner

+0

Можете ли вы сделать фиксацию с вашим текущим кодом, чтобы разделить ветвь? –

ответ

0

Я создал запрос на тяну с исправлением.

Ваша проблема в том, что вы создавал новый WindowController и используя это в качестве ссылки вместо используя контроллер, созданный и используемый NSWindow.

Результат:

enter image description here