窗口出现一瞬间然后消失的原因与 ARC 以及您如何创建窗口控制器的实例有关:
- (IBAction)menuButtonTapped:(id)sender {
MyWindowController *myWindow = [[MyWindowController alloc]
initWithWindowNibName:@"MyWindowController"];
[myWindow showWindow:nil];
[[myWindow window] makeMainWindow];
}
在 ARC 下,myWindow
实例将在其定义的范围内有效。换句话说,在[[myWindow window] makeMainWindow];
到达并运行最后一行之后,窗口控制器将被释放和释放,结果,它的窗口将从屏幕上移除。
一般来说,对于您创建的想要“保留”的项目或对象,您应该将它们定义为具有strong
属性的实例变量。
例如,您的 .h 看起来像这样:
@class MyWindowController;
@interface MDAppController : NSObject
@property (nonatomic, strong) MyWindowController *windowController;
@end
修改后的menuButtonTapped:
方法看起来像这样:
- (IBAction)menuButtonTapped:(id)sender {
if (self.windowController == nil) {
self.windowController = [[MyWindowController alloc]
initWithWindowNibName:@"MyWindowController"];
}
[self.windowController showWindow:nil];
}