SwiftUI多个窗口关闭将导致崩溃

时间:2020-02-21 15:47:39

标签: swift xcode swiftui

我正在Mac的SwiftUI应用中创建第二个窗口。

这就是我叫第二个窗口的方式。

let window = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)
window.center()
window.setFrameAutosaveName("Add Person")
window.contentView = NSHostingView(rootView: AddPerson())
window.makeKeyAndOrderFront(nil)

这很好。但是,当我尝试关闭该窗口时,该应用程序崩溃了。

我正在打电话,以关闭窗口。

NSApplication.shared.keyWindow?.close()

我认为打开两个窗口存在问题。我的开场电话正确吗?

编辑:创建该窗口时,需要设置window.number。我该如何设置?我什么都没找到。

1 个答案:

答案 0 :(得分:2)

好吧,我不认为这是因为窗口本身(我在Xcode 11.3上测试了您的案例,仅带有简单的文本和按钮内容,并且可以正常工作),但是由于某些内容和/或活动对象(管理器等) )

无论如何,您可以尝试通过操作代替强制关闭(如提供的快照中所示)

            NSApp.keyWindow?.performClose(nil)

与单击窗口标题栏上的关闭按钮相同。

更新:作为成员而不是本地变量存储在窗口下方

let window = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)

类似主窗口

class AppDelegate: NSObject, NSApplicationDelegate {

    var window: NSWindow! // << default, main window
    var window2: NSWindow! // << other window (as example)

    ... // somewhere below

    window2 = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)