1

我必须做一个简单的应用程序,当按下按钮时,应该会出现一个新窗口。我试过了

- (IBAction)LanciaPavia:(id)sender {
    NSWindowController *controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
    [controllerWindow showWindow:self];
}

但新窗口出现并立即关闭。我需要做什么?我不知道继续,我是可可世界的新手!

4

4 回答 4

3

答案的关键是范围:

- (IBAction)LanciaPavia:(id)sender {
    NSWindowController *controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
    [controllerWindow showWindow:self];
}    // controllerWindow goes out of scope

在该范围结束时,controllerWindow将超出范围(我假设您正在使用 ARC),因此窗口控制器被销毁并关闭窗口。

使它成为一个实例变量,最好是一个只创建一次的变量。

于 2013-10-05T09:41:15.303 回答
2

尝试在控制器窗口之前调用一个自我

像这样:

[self.controllerWindow showWindow:self];
于 2013-10-01T21:06:12.193 回答
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
于 2013-10-02T13:47:50.250 回答
0

您的controllerWindow变量是该LaciaPavia:方法的本地变量,因此一旦方法完成执行,它就会被释放。尝试在包含LaciaPavia:. 然后执行以下操作:

- (IBAction)LaciaPavia:(id)sender {
    if (!_controllerWindow) {
        _controllerWindow = [[NSWindowController alloc] initWithWindowNibName:@"AOPAVIAWindowController"];
    }
    [[self controllerWindow] showWindow:self];
}
于 2013-10-02T00:10:34.647 回答