0

我正在学习如何使用 Cocoa/Objective-C 创建 osx 应用程序。我正在编写一个简单的应用程序,它将我已经完成的两个不同的教程链接在一起。启动时,选择窗口会加载 2 个按钮,一个按钮加载一个窗口,另一个按钮加载另一个窗口。单击任一按钮时,选择窗口将关闭。

选择窗口控制器对象已添加到 MainMenu.xib 文件中,因此它是在启动时创建的。然后使用 awakeFromNib 消息打开窗口。

我想要一个按钮的结果来打开 ADC 网站上的“轨道控制器”教程应用程序。动作如下所示:

- (IBAction)trackButton:(id)sender {
    TMTrackController *trackController = [[TMTrackController alloc] init];
    [self.window close];
}

我向 TMTrackController 类添加了一个 init 方法,如下所示:

- (id) init {
    if (self = [super init]) {
        [self showWindow];
        TMTrack *myTrack = [[TMTrack alloc] init];
        myTrack.volume = 50;
        self.track = myTrack;
        [self updateUserInterface];
        return self;
    }
    else {
        return nil;
    }
}

- (void) showWindow {
    if(!self.window) {
        [NSBundle loadNibNamed:@"trackWindow" owner:self];
    }
    [self.window makeKeyAndOrderFront:self];
}

我不确定这是执行此操作的最佳方法,因为我知道choiceController 类在关闭时将被释放,从而也摆脱了 TMTrackController 类。但是,即使我取消勾选 ChoiceWindow.xib 的“关闭时释放”框,它也会中断。

这样做的正确方法是什么?

4

2 回答 2

0

它不完全一样,但这是我对此类问题的解决方案:Stackoverflow

只需忽略我在此答案中关于将窗口显示为模式窗口的声明即可。其他一切仍然有效。这样你就可以拥有你的个人窗口控制器,它可以控制 xib 中的所有内容。这对于之后维护项目(并且您保持应用程序逻辑)是一个巨大的优势。

于 2012-06-14T08:48:41.850 回答
0

在同一个项目中使用 xib :

@interface    

@property (strong) NSWindowController *test;

@implementation

@synthesize test; 

    test = [[NSWindowController alloc] initWithWindowNibName:@"XIB NAME HERE"];
    [test showWindow:self];
    [home close];
于 2012-06-14T00:42:58.207 回答