我在代理应用程序中使用 NSMenu(坞站中没有图标)。当点击此菜单中的按钮时,我想显示一个通用的 NSWindowController。
我的菜单按钮操作:
- (IBAction)menuButtonTapped:(id)sender {
MyWindowController *myWindow = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
[myWindow showWindow:nil];
[[myWindow window] makeMainWindow];
}
但窗口只是在屏幕上“闪烁”(它显示和消失的速度非常快)。
有什么解决办法吗?
窗口出现一瞬间然后消失的原因与 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];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)