Вам нужно сделать несколько вещей здесь
NSMainStoryboardFile
ключ / значение из plist NSApplication
и назначьте его кнопке Principal Class (NSPrincipalClass)
. Имя должно быть полностью соответствующим имени вашего модуля.
delegate
. Убедитесь, что вы держите ссылку на свой объект делегата. Ive просто использовал здесь let
.
class GrookApplication: NSApplication {
let strongDelegate = AppDelegate()
override init() {
super.init()
self.delegate = strongDelegate
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
, например, простой делегат.
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
override init() {
super.init()
print("wassup")
//conceptual proof of life init override
//wait until applicationDidFinishLaunching , specially for UI
}
var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
print("yo! I'm alive")
window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 200, height: 200), styleMask: .titled, backing: .buffered, defer: false)
window.makeKeyAndOrderFront(nil)
}
}
EDIT 2018 Verified High Sierra
НЕ пытайтесь инициализация окна или просмотра контроллера внутри init
, это приводит к двойным проблемам инициализации приложений и сбоям. Приложение не закончило запуск на этом этапе. Подождите, пока applicationDidFinishLaunching
не запустит какие-либо значительные операции.