即時通訊非常新的可可開發中,我試圖加載一個窗口。 我會解釋我的問題。NSWindowController子類 - 初始化被調用兩次
當用戶單擊我使用下面的代碼的菜單項加載了我的窗前
if (!cadastroContasController)
{
cadastroContasController = [[cadastroContas alloc]init];
[cadastroContasController SetMenuItem:sender];
}
if (![[cadastroContasController window] isVisible])
{
NSLog(@"!isVisible");
[cadastroContasController showWindow:nil];
}
我我cadastroContas類看起來是這樣的:
@interface cadastroContas : NSWindowController
{
NSMenuItem *mnuCommand;
IBOutlet NSComboBox *cmbSelecao;
IBOutlet NSTextField *txtNome;
IBOutlet NSTextField *txtSaldoInicial;
IBOutlet NSTextField *txtAnotacoes;
}
- (void)windowDidBecomeKey:(NSNotification *)notification;
- (BOOL)windowShouldClose:(id)sender;
- (void)windowWillClose:(NSNotification *)notification;
- (void)SetMenuItem:(NSMenuItem*) menu;
- (NSMenuItem*) MenuItem;
@end
和實施
@implementation cadastroContas
-(void)windowDidLoad
{
NSLog(@"windowDidLoad");
[mnuCommand setState:NSOnState];
}
-(id)init
{
self = [super initWithWindowNibName:@"cadastroContas"];
NSLog(@"Init self=%p", self);
return self;
}
-(void)dealloc
{
NSLog(@"Dealoc=%p", self);
[super dealloc];
}
- (void)windowDidBecomeKey:(NSNotification *)notification
{
NSLog(@"windowDidBecomeKey window=%p", [self window]);
}
- (BOOL)windowShouldClose:(id)sender
{
NSLog(@"windowShouldClose Window=%p", [self window]);
NSLog(@"mnuComando=%p GetMenuItem=%p", mnuCommand, [self MenuItem]);
if (mnuCommand)
{
[mnuCommand setState:NSOffState];
}
return YES;
}
- (void)windowWillClose:(NSNotification *)notification
{
NSLog(@"windowWillClose Window=%p", [self window]);
NSLog(@"mnuCommand=%p GetMenuItem=%p", mnuCommand, [self MenuItem]);
[self dealloc];
}
- (void)SetMenuItem:(NSMenuItem*) menu
{
mnuCommand = menu;
}
- (NSMenuItem*) MenuItem
{
return mnuCommand;
}
@end
當菜單被點擊時,我收到兩條消息「初始化」,我不知道爲什麼。 例:
[2223:a0f] Init self=0x10014fe40
[2223:a0f] Init self=0x10011f5a0
第二個消息讓 「[cadastroContasController SetMenuItem:sender];
」 無用。
所以,我需要幫助明白怎麼回事..
另一件事,[[cadastroContasController window]
總是返回NULL(0x0)
!!,但我的控制器內我可以處理它(不是null)。
嗨,彼得謝謝你的回答。 – 2011-02-13 15:26:58