2016-05-30 10 views
2

Я начал с проекта раскадровки. и я поставил предмет Мюбебар. Когда щелкнут элемент меню, в AppDelegate.swift запускается следующий метод.activateIgnoringOtherApps и makeKeyAndOrderFront не работает после закрытия NSWindow

func setWindowVisible() { 
    NSApp.activateIgnoringOtherApps(ture) 
    NSApp.mainWindow?.makeKeyAndOrderFront(self) 
} 

это приносит мое приложение спереди. Но как только я нажимаю кнопку закрытия, красный в окне, он никогда не работает.

Используется для работы в проектах, не связанных с раскадрой, независимо от того, закрываю ли я окно.

Я поставил

NSApp.mainWindow?.releasedWhenClosed = false 

в applicationDidFinishLaunching()

Может кто-нибудь мне помочь, пожалуйста?

ответ

3

releasedWhenClosed в applicationDidFinishLaunching не имеет никакого эффекта, так как mainWindow недвижимости nil в данный момент. → Окно создается после выполнения этого метода.

Значение releasedWhenClosed по умолчанию равно false, когда окно создается в Interface Builder.

Свойство mainWindow, вероятно, nil после закрытия окна, потому что тогда больше нет mainWindow. Из документов:

Значение в этом свойстве равно нулю, когда файл раскадровки или файл nib приложения еще не закончил загрузку. Это также может быть ноль, когда приложение неактивно или скрыто.

Я был в состоянии показать окно снова (после закрытия) путем доступа к окну внутри windows массива NSApp.

NSApp.activateIgnoringOtherApps(true) 
NSApp.windows[0].makeKeyAndOrderFront(self) 

В случае, если у вас есть более одного окна, вам нужно найти правильный в массиве ..

+0

еще не повезло. У меня есть одно окно, которое предоставляет шаблон xcode –

+0

Можете ли вы распечатать массив окон? – mangerlahn

+0

Я только что решил. var window: NSWindow! с этим свойством, window = NSApp.mainWindow! в applicationDidBecomeActive(), затем self.window.makeKeyAndOrderFront (self) в моем методе. –