2012-02-15 16 views
1

ボタンをクリックしたときにポップアップウィンドウを作成するアプリケーションがあります。ポップアップウィンドウはnibファイルからロードされます。そして、ボタンがクリックされ、ウィンドウがうまくポップアップします。しかし、awakeFromNibメソッドは2回呼び出されます。ここにコードがあります。NSWindowController awakeFromNibが2回呼び出されています

アプリケーションの委任:

... 

-(IBAction)myButton:(id)sender{ 

    printf("[settings]: button pressed\n"); 

    Config_SelectorSetup *selectorSetup = [[Config_SelectorSetup alloc] initWithWindowNibName:@"Config_SelectorSetup"]; 

    printf("about to load\n"); 

    [[selectorSetup window] makeKeyAndOrderFront:sender]; 

} 

Config_SelectorSetup.m

- (id) initWithWindowNibName:(NSString *)windowNibName{ 

    printf("[initWithWindowNibName]\n"); 

    if(self = [super initWithWindowNibName:windowNibName]){ 

     ... 

    } 

    return self; 

} 

- (void)awakeFromNib{ 

    printf("[awakeFromNib]\n"); 

    [self startScreen]; 
} 

そして、ここでは出力されます:

コールスタック、それは第二 [NSObject performSelector:]で呼ばれています最初の時間を分析
[settings]: button pressed 
[initWithWindowNibName] 
about to load 
[awakeFromNib] 
[awakeFromNib] 

1つは[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:]です。

誰かが私が間違っていると言うことができますか?

おかげ

答えて

3

は、ファイルの所有者以外のConfig_SelectorSetupオブジェクトをConfig_SelectorSetup.xib含まれていますか? awakeFromNib

てみロギングself -

NSLog(@"self = %p", self); 

は、それが同じアドレスを毎回印刷していますか?異なる住所を印刷している場合は、ペン先にConfig_SelectorSetupオブジェクトがある可能性があります。

+0

同じ問題があってもアドレスが同じ場合はどうなりますか? – trumpetlicks

+0

次に、新しい質問を関連する詳細で開く必要があります。 –

0

あなたのクラスにいくつのアウトレットがありますか、そのクラスはサブクラス化していますか?特定のサブクラス(例えばNSDocument)で見つかった場合、複数のアウトレットが接続されていると、各nibオブジェクトはロード時にawakeFromNibメソッドを起動します。 NSLogあなたのアウトレットは、彼らがnilまたはアドレスを出力するかどうかを確認します。

関連する問題