2017-01-15 5 views
0

현재 새 터치 바 내부를 미리 보려면 작은 open source app을 만들고 있습니다. URL을 통해 이미지를 수신하는 드래그 앤 드롭보기 창이 있습니다. TouchBarView 내부에 NSImageView가있는 IB 터치 바. interface builder structure (screenshot)NSTouchBar에서 NSImageView 채우기


창에서 이미지를 보여주기 위해 내 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을 얻을 수있는 드래그 N 드롭 이벤트를 수신 할 대리자를 사용하여 볼 수 있듯이. 이제 이미지/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

확인합니다. 컨트롤러가로드되기 전에 _showImageInTouchBar_를 호출하지 않습니까? –

+0

아 좋은 힌트! 감사! 'touchBarImageView'는 참으로 nil입니다. **하지만 왜? ** MainViewController에서 ImageView를 채우면 아무 것도 할 필요가 없습니다. 그리고 죄송합니다. windowDidLoad() 뒤에 showImageInTouchBar()를 호출합니다. – alexkaessner

+0

분기를 분리하려면 현재 코드로 커밋 할 수 있습니까? –

답변

0

픽스 요청을 생성했습니다.

귀하의 문제는 당신이 새로운 WindowController을 만드는 대신 NSWindow 표시에 의해 만들어지고 사용되는 컨트롤러를 사용하여 참조로이 사용하던 것이 었습니다.

결과 : _touchBarImageView_가 nil이 아닌 경우

enter image description here