我必须做一个简单的应用程序,当按下按钮时,应该会出现一个新窗口。 我试过
- (IBAction)LanciaPavia:(id)sender {
NSWindowController *controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
[controllerWindow showWindow:self];
}
但会出现新窗口并立即关闭。我需要做什么?我不知道要继续,我是可可世界的新手!
答案 0 :(得分:3)
答案的关键是范围:
- (IBAction)LanciaPavia:(id)sender {
NSWindowController *controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
[controllerWindow showWindow:self];
} // controllerWindow goes out of scope
在该范围的末尾,controllerWindow
将超出范围(我假设您正在使用ARC),因此窗口控制器将被销毁并关闭窗口。
将其设为实例变量,最好只创建一次。
答案 1 :(得分:1)
尝试在controllerWindow
之前调用self 像这样:[self.controllerWindow showWindow:self];
答案 2 :(得分:1)
加载窗口的简单方法如下: -
#import <Cocoa/Cocoa.h>
#import "AOPAVIAWindowController.h"
@interface ARCAppDelegate : NSObject <NSApplicationDelegate>
{
NSWindowController *windowController;
}
-(IBAction)loadWindowNew:(id)sender;
@property(readwrite,strong)NSWindowController *windowController;
@end
#import "ARCAppDelegate.h"
@implementation ARCAppDelegate
@synthesize arcWindowController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
-(IBAction)loadWindowNew:(id)sender
{
self.windowController=[[AOPAVIAWindowController alloc]init];
[self.windowController showWindow:self];
}
@end
现在在你的窗口中,控制器类写成如下: -
#import "AOPAVIAWindowController.h"
@implementation AOPAVIAWindowController
-(NSString *)windowNibName
{
return @"AOPAVIAWindowController";
}
@end
答案 3 :(得分:0)
您的controllerWindow
变量是LaciaPavia:
方法的本地变量,因此只要方法完成执行,它就会被释放。尝试在包含LaciaPavia:
的类中创建属性。然后执行以下操作:
- (IBAction)LaciaPavia:(id)sender {
if (!_controllerWindow) {
_controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
}
[[self controllerWindow] showWindow:self];
}