Jadi saya punya aplikasi swiftUI, suatu saat saya membuat NSWindow dan menetapkan contentView, seperti ini:
// ////////////////////////////////////////////////////////
// Add token window
// ////////////////////////////////////////////////////////
let configurationView = ConfigurationView().environmentObject(store)
configurationWindow = NSWindow(
contentRect: NSRect(x:0, y: 0, width: 480, height: 500),
styleMask: [.titled, .closable, .miniaturizable, .fullSizeContentView],
backing: .buffered, defer: false
)
configurationWindow.center()
configurationWindow.setFrameAutosaveName("BSchauer")
let hostingController = NSHostingController(rootView: configurationView)
configurationWindow.contentViewController = hostingController
configurationWindow.makeKeyAndOrderFront(nil)
configurationWindow.setIsVisible(false)
...
// later on in the code
@objc func toggleConfigurationWindow() {
if self.configurationWindow.isVisible {
self.configurationWindow.setIsVisible(false)
if let button = self.statusBarItem.button {
self.popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
}
} else {
self.configurationWindow.setIsVisible(true)
self.configurationWindow.contentViewController?.view.window?.becomeKey()
}
}
Anda melihat bahwa cara saya berinteraksi dengan jendela untuk menyajikannya kepada pengguna adalah melalui bendera yang terlihat, sekarang masalahnya adalah ketika jendela ditampilkan dan ditutup melalui tombol tutup di bilah atas, jendela tersebut entah bagaimana dilepas (?) dan saat berikutnya pengguna mencoba berinteraksi dengan aplikasi dan membuka kembali jendela, saya mendapatkan kesalahan segmentasi.
Salah satu hal yang saya coba adalah alih-alih menyetel visibilitas ke false, cukup membuat ulang jendela, tetapi saya masih mendapatkan kesalahan segmentasi.
Semua jawaban sebelumnya yang saya temukan berhubungan dengan cara lama menangani NSViewController dan mengganti metode windowShouldClose
, tapi sepertinya saya tidak bisa membuatnya berfungsi.
TL:DR: Ketika pengguna menekan tombol tutup berwarna merah di jendela, alih-alih jendelanya hancur, saya hanya ingin mengatur visibilitasnya ke false