我在代理应用程序中使用了一个NSMenu (在码头上没有图标)。当点击此菜单中的按钮时,我想显示一个通用的NSWindowController。
我的菜单按钮动作:
- (IBAction)menuButtonTapped:(id)sender {
MyWindowController *myWindow = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
[myWindow showWindow:nil];
[[myWindow window] makeMainWindow];
}但是窗口在屏幕上只是“闪烁”(它显示和消失得非常快)。
有解决办法吗?
发布于 2012-11-18 17:35:56
窗口突然出现然后消失的原因与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];
}发布于 2012-11-18 15:59:18
用这个:
[[myWindow window] makeKeyAndOrderFront:self];https://stackoverflow.com/questions/13441718
复制相似问题