ウィンドウが一瞬表示されてから消える理由は、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];
}