freigegeben [Erste, bitte beachten Sie, ich bin nicht mit Interface Builder]Modal NSWindow nie
Ich habe ein NSWindow als modaler ausgewiesen werden, wenn ein Menüpunkt angeklickt wird. Hier ist die Anzeige der Code es:
let win = NSWindow(contentRect: NSRect(origin: NSZeroPoint, size: NSSize(width: 650, height: 400)), styleMask: NSResizableWindowMask, backing: .Nonretained, defer: false)
win.releasedWhenClosed = true
setupController = SetupSheetController(window: win)
mainWindow.beginSheet((setupController!.window)!) { (response: NSModalResponse) in
print("didClose")
self.setupController = nil
}
setupController
als Instanzvariable var setupController: SetupSheetController?
definiert ist; und SetupSheetController
eine NSWindowController
Unterklasse ist.
Wenn der Benutzer mit diesem Blatt fertig ist, wird self.window?.sheetParent?.endSheet(self.window!, returnCode: NSModalResponseXXX)
von der setupController
aufgerufen.
Mein Problem ist, dass weder das modale NSWindow noch sein Controller freigegeben werden. Und sie werden nicht wiederverwendet, wenn ich das modale Blatt wieder öffne. Bitte beachten Sie auch, dass ich den Controller an keiner anderen Stelle als hier gezeigt referenziere. Ideen?
Ich denke, die allgemeine Idee ist, dass sobald Windows erstellt werden, sollten sie für die Dauer der App-Lebensdauer wiederverwendet werden. Das Erstellen von Fenstern ist teuer und daher ist das Standardverhalten, das Fenster langsam zu erstellen, wenn es zum ersten Mal angezeigt wird, und es dann einfach zu verbergen, sobald es fertig ist. Das erfordert natürlich auch, dass Sie einen dauerhaften Verweis auf den Controller behalten. – pco494