Этот вопрос касается приложения для macOS, а не для iOS.
У меня есть базовое приложение Cocoa, которое поддерживает несколько окон. Я заметил, что NSViewController.viewWillAppear()
и viewDidAppear()
не вызываются при запуске приложения, и ранее окно было свернуто в док-станцию.
Чтобы воспроизвести:
- Запустите приложение и откройте новое окно
- Свернуть окно в док (Окно → Свернуть)
- Выйти и перезапустить приложение
→ Окно все еще должно быть свернуто в доке
- Нажмите на окно в доке, чтобы вернуть его на экран.
Ожидал:
NSViewController.viewWillAppear()
иviewDidAppear()
должны быть вызваны
Действительный:
- они не называются
Это проблема, потому что мне нужна ссылка на NSWindow
в моем контроллере представления, чтобы завершить некоторые настройки, поэтому я не могу просто подключиться к viewDidLoad()
.
Минимальный воспроизводимый пример
- Системные настройки → Общие → Снимите флажок Закрывать окна при выходе из приложения.
- Xcode → New Project → macOS App:
- User Interface: Storyboard
- ☑︎ Создание приложения на основе документов
- Откройте
ViewController.swift
и добавьте:
.
override func viewWillAppear() {
super.viewWillAppear() [PUT BREAKPOINT HERE]
}
- Open
Document.swift
and:- Have
func data(ofType typeName: String)
simply returnData()
- Пусть
func read(from data: Data, ofType typeName: String)
ничего не делает (удаляет исключение)
- Have
- Создавайте и запускайте
- Cmd-S, чтобы сохранить документ, открытый по умолчанию
- Window → Minimize
- Document window now minimized in the dock
- Cmd-Q, чтобы выйти из приложения
- Relaunch the app
- Document window still sits minimized in the dock
- Щелкните значок окна документа в доке, чтобы вернуть его.
viewWillAppear()
и viewDidAppear()
вызываться не будут, так как окно не свернуто.
windowDidLoad
илиmakeWindowControllers
. - person Willeke   schedule 22.11.2020