Заполнение NSImageView внутри NSTouchBar
В настоящее время я создаю крошечное приложение с открытым исходным кодом для предварительного просмотра внутри новой сенсорной панели. У меня есть окно с перетаскиванием, чтобы получать изображения через его URL. И сенсорная панель IB с NSImageView внутри TouchBarView.
структура построителя интерфейса (скриншот)
Это работает в моем 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
}
}
}
}
Как видите, я использую делегата для прослушивания событий drag n drop, чтобы получить 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
1 ответ
Я создал запрос на удаление с исправлением.
Ваша проблема заключалась в том, что вы создавали новый WindowController и использовали его в качестве эталона вместо использования контроллера, созданного и используемого NSWindow.
Результат: