SwiftUI множественное закрытие windows вызовет сбой - PullRequest
2 голосов
/ 21 февраля 2020

Я создаю второе окно в своем приложении SwiftUI для Ма c.

Так я называю свое второе окно.

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()

Я думаю, что есть проблема с открытием двух windows. Правильно ли мой вводный звонок?

Редактировать: Мне нужно установить window.number при создании этого окна. Как я могу установить это? Я ничего не нашел.

1 Ответ

1 голос
/ 21 февраля 2020

Ну, я не думаю, что это из-за самого окна (я проверил ваш случай на Xcode 11.3 с простым текстовым и кнопочным содержимым, и это работает), но из-за некоторого содержимого и / или активных объектов (менеджеры и т. Д.). c.)

В любом случае, вместо принудительного закрытия (как в предоставленном снимке) вы можете попытаться закрыть с помощью действия

            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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...