2012-02-15 4 views
1

버튼을 클릭 할 때 팝업 창을 만들려는 응용 프로그램이 있습니다. 팝업 창이 nib 파일에서로드됩니다. 그러면 버튼이 클릭되고 창은 행복하게 팝업됩니다. 하지만 awakeFromNib 메서드는 두 번 호출됩니다. 여기에 코드가 있습니다.NSWindowController awakeFromNib가 두 번 호출됩니다.

응용 프로그램 위임 :

[settings]: button pressed 
[initWithWindowNibName] 
about to load 
[awakeFromNib] 
[awakeFromNib] 

호출 스택 분석, 처음은이 [NSObject performSelector:] 두 번째로라고 :

... 

-(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]; 
} 

그리고는 출력 하나는 [NSIBObjectData nibInstantiateWithOwner:topLevelObjects:]입니다.

누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

감사

답변

3

Config_SelectorSetup.xib는 파일의 소유자 외에 Config_SelectorSetup 객체를 포함되어 있습니까? awakeFromNib에서

시도 로깅 self -

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

는 동일한 주소 매번 인쇄합니까? 다른 주소를 인쇄하는 경우 펜촉에 Config_SelectorSetup 개체가있을 가능성이 있습니다.

+0

동일한 문제가 있지만 주소가 같은 경우는 어떻게합니까 ??? – trumpetlicks

+0

그런 다음 관련 세부 정보가있는 새로운 질문을 열어야합니다. –

0

클래스에 몇 개의 아웃렛이 있으며 서브 클래 싱 클래스는 무엇입니까? 특정 하위 클래스 (예 : NSDocument)에서 여러 콘센트가 연결되어있는 경우 각 nib 객체는로드시 awakeFromNib 메서드를 실행합니다. NSLog 콘센트는 출력이 nil인지 또는 주소인지 확인합니다.

관련 문제