2011-09-21 4 views
0

나는 awakeFromNib이 한 번만 호출되어야한다고 말했고, 나는 이것이 WindowController에 대해 두 번 호출된다는 것을보고 놀랐다. IB를 사용하여 MainMenu.xib에서 WindowController를 작성했지만로드 할 윈도우 xib 파일에 init 메소드를 추가했는지 여부를 알려주고 있습니다.awakeFromNib가 내 WindowController에 대해 두 번 호출되었습니다. 맞습니까?

코드를 디버깅 할 때이 호출 스택에 의해 트리거 된 awakeFromNib에 대한 첫 번째 호출을 찾습니다. 그래서 기본적으로 [MyWindowController init]이 첫 번째 호출을 트리거했습니다. 다음 두 번째 호출 MainMenu.xib로드 때문에 것 같아요. 그 맞습니까 ?

누군가가 조명을 사용할 수 있습니까?

현재, 스택 오버플로와 비슷한 다른 질문을하고 일부 답변은 파일 오웬 문제로 인해 발생할 수 있다고 대답했습니다. 그래서 저는 특히 윈도우 xib 파일의 파일 소유자를 NSApplication으로 변경합니다. 그러나 awakeFromNib은 여전히 ​​MyWindowController에 대해 두 번 호출되었습니다. 귀하의 질문에서

enter image description here

+0

두 개의 WindowController 인스턴스가 없습니까? –

+0

두 개의 windowcontroller 인스턴스가 만들어 질 가능성이 있다고 생각하지 않습니다. b/c 내 MainMenu.xib에 1 개만 만듭니다. 하지만 NSLog에서 % P를 사용하여 주소를 출력하여 확인합니다. 그리고 그것은 오직 하나의 인스턴스 만 생성된다는 것을 확인합니다. – Qiulang

답변

1

난 당신이 IB에서 MyWindowController를 인스턴스화 된 후 MyWindowControllers에서 당신이 initWithWindowNibName와 두 번째 펜촉을로드하는 init을 이해 :? 그렇다면 자연스럽게 두 번의 awakeFromNib 호출을 받게됩니다. 하나는 init 메소드에 지정된 NIB를로드 할 때, 다른 하나는 MainMenu.xib를로드 할 때입니다.

+0

그건 의미가 있습니다. 감사! – Qiulang

+0

그럼 또 다른 질문이 있습니다. 어디에서 고유 한 펜촉을로드 한 후에 WindowController 용 초기화 코드를 넣어야합니까? 펜촉을로드 한 후에 설정할 몇 가지 속성이 있으며 현재 awakeFromNib에 넣습니다. 하지만 awakeFromNib가 두 번 호출되면 내 init 코드를 넣을 수있는 좋은 곳이 있습니까? – Qiulang

+1

NSWindowControllers의 windowDidLoad 메서드를 재정의 할 수 있습니다. 편집 :이 시점에서 창로드 시퀀스가 ​​완료되지 않았으므로 창이나 유사한 시트를 실행하지 마십시오. – Michael

관련 문제