2012-09-06 5 views
2

동일한 파일 MainWindow.xib에 모든보기가있는 범용 응용 프로그램이 있습니다. 오늘은 이러한 뷰를 각각의 xib 파일 (예 : MainMenuController.h, MainMenuController.m 및 MainMenuController.xib)로 분리하기로 결정했습니다. 이제는 IBActions를받을 수 없습니다. 여기에 내가 단계별로 한 것입니다 : xib 파일의 이름을 바꾼 후에 IBAction이 작동하지 않습니다.

  1. 나는 MainMenuController.xib라는 새 .xib 파일을 생성하고 이미 존재 MainMenuController 클래스에 파일의 소유자입니다 설정합니다.

  2. MainWindow.xib 파일의 MainMenuController에 해당하는 뷰를 복사하여 새로 만든 MainMenuController.xib에 붙여 넣었습니다. File 's Owner 뷰를 새로 붙여 넣은 뷰 (IB로 연결됨)로 설정했습니다.

  3. info.plist에서 "Main xib file base name"에 대한 항목을 제거 했으므로 응용 프로그램이 MainWindow.xib와 함께 자동으로 열리지 않습니다.

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    mainMenuController = [[MainMenuController alloc] init]; 
    self.window.rootViewController = mainMenuController; 
    [self.window makeKeyAndVisible]; 
    [mainMenuController release]; 
    

    "mainMenuController"및 "창"인스턴스 변수도 속성으로 선언을 :

  4. 나는 프로그래밍 방식으로 창을 생성하고이 코드로에 MainMenuController를 추가 앱 대리자를 수정했습니다.

  5. 나는 하나 개의 AppDelegate에 클래스와 main.m가 포함되어있는 다음 MainMenuController의 견해가 올

    int main(int argc, char *argv[]) 
    { 
        @autoreleasepool { 
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    }} 
    

지금 응용 프로그램을 열 때, 나는 참조하십시오. 이 시점에서 필자는 새 xib 파일의 붙여 넣기보기에서 IBOutlets 및 IBActions를 연결하기 시작했습니다. 파일의 소유자에서 IBOutlet을보고 올바르게 연결했지만 버튼을 누르면 IBAction의 함수가 호출되지 않습니다. 내 마음에 온

가능한 오류 : (1) 응용 프로그램 창을 제대로 설정하지,이 이벤트를 전달하지 않습니다, (2) 무언가가 붙어 또는 뷰를 복사하는 동안 여전히 이전 소유자 를 가리키는 손실입니다 (3) xcode 프로젝트에 뭔가 잘못 붙어있다

당신은 그 문제가 어떻게 될 것이라고 생각하니? 위의 것 중 하나입니까? 이 문제를 어떻게 해결할 수 있습니까? 어떤 도움을 주셔서 감사합니다.

미리 감사드립니다. 메인 뷰 컨트롤러의

답변

0

당신의 창조 :

mainMenuController = [[MainMenuController alloc] init]; 

은 XIB에 대한 언급이 없다. 따라서 XIB에 있거나 없을 수도있는 것에 대한 참조없이 순수하게 프로그래밍 방식의 생성 작업을 수행하고 있습니다. 따라서보기 컨트롤러가 작동하는 것으로 보이지만 콘센트 또는 작업 중 어느 것도 연결되어 있지 않습니다. 다른 곳에서 참조를 만들 수도 있지만 적절하지 않다고 생각합니다.

은 아마 당신이 원하는 :

mainMenuController = [[MainMenuController alloc] 
           initWithNibName:@"MainMenuController" bundle:nil]; 

즉, 명시 적으로 컨트롤러를 만들 XIB에서 무엇이든 사용할 것이다.

+0

답변 주셔서 감사합니다.하지만 init 및 initWithNibName을 모두 시도했습니다. 아무런 차이가 없습니다. –

+0

아무런 효과가 없다는 것은 불가능합니다. 당신이'UINib nibWithNibName : bundle :'을한다면 유효한 객체를 다시 얻을 수 있습니까? – Tommy

+0

이 함수는 가비지 문자열의 경우에도 아무 이유없이 nil을 반환하지 않습니다. 밤에이 문제로 고생하고 나면 환경에 문제가 있으며 처음부터 시작한다고 결정했습니다. 어쨌든 도움을 주셔서 대단히 감사합니다. –

관련 문제