В настоящее время я создаю крошечный 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
Проверьте _touchBarImageView_ не ноль. Вы не вызываете _showImageInTouchBar_ перед загрузкой контроллера? –
Ах хороший намек! Благодаря! «TouchBarImageView» действительно ничто. ** Но почему? ** Если я заполню ImageView в моем «MainViewController», мне не нужно ничего делать. И не жалко, я вызываю 'showImageInTouchBar()' после 'windowDidLoad()'. – alexkaessner
Можете ли вы сделать фиксацию с вашим текущим кодом, чтобы разделить ветвь? –