2012-01-03 2 views
2

Cooca 응용 프로그램에서 MainMenu.xib가 표준 템플릿에 설정되어 있습니다. 이 펜촉은 응용 프로그램 위임과 함께 설치되었습니다. info.plist에서 "Main nib file bas ename"키는 시작할 때로드 할 nib 파일을 설정합니다.코코아 응용 프로그램의 applicationDidFinishLaunching에 메인 창로드하기

가능한 경우 펜촉을 사용하지 않고 응용 프로그램을 시작하려면 응용 프로그램의 기본 대리자에서 applicationDidFinishLaunching에 MainMenu.xib를로드하고 싶습니다.

가능합니까?

+1

응용 프로그램의 위임은 NIB 내부에 있으므로 설명 할 수 없습니다. 무엇을 성취하려고합니까? 아마도 또 다른 방법이있을 것입니다. –

답변

3

먼저, main.m 파일을 지원하는 NSApplicationMain을 주석으로 처리하십시오. NSApplicationMain()은 Info.plist에 언급 된 주 펜촉을로드하므로 건너 뜁니다. 대신, 설치 앱 위임하고 응용 프로그램을 실행합니다 createMainWindow하는 비슷한 전화 기능 : 응용 프로그램의 대리인의 아래 applicationDidFinishLaunching에서, 그리고

int main(int argc, const char * argv[]) 
{ 
    //return NSApplicationMain(argc, argv); 

    @autoreleasepool { 
     NSApplication * application = [NSApplication sharedApplication]; 
     MYAppDelegate* appDelegate = [[MYAppDelegate alloc] init]; 

     [application setDelegate:appDelegate]; 
     [application run]; 
    } 

    return EXIT_SUCCESS; 
} 

- (void)createMainWindow 
{ 
    self.wincon = [[MYCustomWindowController alloc] initWithWindowNibName:@"MainMenu"]; 
    self.window = self.wincon.window; // window property in appdelegate created for single-view app 
    // Also had to connect About: to application's orderFrontStandardAboutPanel 
} 

MainMenu.xib의 파일의 소유자 사용자 정의 클래스는해야 응용 프로그램에서 MYCustomWindowController로 전환 할 수 있습니다.

MainMenu.xib에이 예제와 같은 창이 있으면 "참조 콘센트"를 File 's Owner-> 창에 연결해야합니다.

단일보기 응용 프로그램으로 시작한 경우 MainMenu.xib에서 App Delegate 개체를 삭제하십시오. 그렇지 않으면 xib가 응용 프로그램 대리인의 두 번째 인스턴스를 만듭니다. MYAppDelegate.managedObjectContext와 같은 것을 참조하는 경우 이것은 끔찍할 수 있습니다. 응용 프로그램 대리인에 바인딩해야하는 경우에는 delegate.managedObjectContext의 키 경로를 사용하여 응용 프로그램에 바인딩 할 수 있습니다.

왜 이렇게 했습니까? 때로는 내 응용 프로그램이 GUI로 시작되기도하고 때로는 응용 프로그램이 시작되지 않기도합니다.

1

이것은 가능하지만 IMO 문제는 거의 없습니다. 번들이 이미있는 경우 작은 nib 파일 (메뉴 만 포함, 창 없음)을 포함하는 데 드는 비용은 거의 들지 않습니다. 실행 후 별도의 nib 파일에서 나머지 UI를로드하려면 괜찮습니다. 하지만 MainMenu.nib을로드하고 기본 메뉴를 제공하도록 허용하는 것이 좋습니다. (당신의 접근 방식으로 어떤 문제를 해결하려고하는지 명확하지 않다.) Lap Cat은 "읽을 거리가없는 일"이라고 불리는 일련의 기사를 썼다. 마지막 기사 인 The Empire Strikes Back에 니블이없는 프로젝트에 대한 링크가 포함되어 있어야합니다. 그의 기술은 여전히 ​​10.7에서 작동합니다.

관련 문제