关闭NSWindow,但不要把它弄清楚

时间:2017-11-13 20:56:29

标签: swift cocoa

我有一个没有窗口的应用程序,“Application is agent”设置为YES。在那个应用程序中,我有一个“let mainWindow:NSWindow”,点击一个菜单项我会做以下事情:

func createNewWindow(){
    mainWindow.center()
    mainWindow.hidesOnDeactivate = true
    mainWindow.isMovableByWindowBackground = true
    mainWindow.backgroundColor = NSColor(calibratedHue: 0, saturation: 0, brightness: 1, alpha: 0.4)
    mainWindow.contentViewController = searchView
    mainWindow.makeKeyAndOrderFront(nil)
    NSApp.activate(ignoringOtherApps: true)
}

如果我在窗口外单击或以任何方式将焦点转移到另一个应用程序,我的窗口关闭,我必须单击我的菜单项再次打开它。现在这就是我想要的,所以这很棒。但是如果我在视图控制器中调用“self.view.window?.close()”并在单击我的菜单项后再次打开我的窗口,那么在访问mainWindow时我得到了一个错误的访问权限,所以我猜是有什么设置它当我把它关闭时,它就是零。

如何以与在窗口外单击时相同的方式关闭窗口?或者我该如何防止错误的访问错误?

谢谢你 索伦

1 个答案:

答案 0 :(得分:1)

某些在关闭窗口时将其设置为nil

来自documentation of close()

  

如果窗口设置为关闭时释放,则发布释放消息   在当前事件完成后发送到对象。为   NSWindow对象,默认是在关闭时释放,而对于   NSPanel对象,默认情况下不会被释放。你可以使用   isReleasedWhenClosed属性可更改默认行为。

更改行为或致电不会释放窗口的orderOut(_:)