2011-03-17 1 views
2

나는 UINavigationController를 사용하고 rootViewController를 추가하는 간단한 코드를 가지고 있습니다. 일부 처리가 발생하면 현재보기 컨트롤러를 끈 다음 다른보기 컨트롤러로 바꾸기를 원합니다. 이 잘 작동하는 것,하지만 내 원래보기 컨트롤러 dealloc 있지 않습니다. 나는 breakpoint를 dealloc으로 설정하고 결코 충돌하지 않는다. 아래는 제 코드입니다. 왜 그런지 모르겠습니다. startController를 두 번 릴리스하면 테스트가 중단됩니다.NavigationController initWithRootViewController dealloc

StartViewController *startController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:[NSBundle mainBundle]]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:startController]; 
    [nav pushViewController:startController animated:NO]; 

    self.navController = nav; 

    [startController release]; 
    [nav release]; 

도움 주셔서 감사합니다.

+1

@ user665003 : navController 속성은 어떻게 정의되어 있습니까? – Oliver

답변

1

궁극적 인 목표는보기 컨트롤러의 보유 개수를 0으로 만드는 것입니다. 따라서보기가 유지하는 모든 것이 해제되고보기가 유지되는 모든 것이 릴리스되도록하십시오.

다음과 같은 가능한 원인을 확인하십시오 :

  1. 당신이 버튼을 사용자 정의를 다시있는 경우가 navController에서보기 컨트롤러를 팝업해야합니다. 기본 뒤로 버튼이 정상적으로 작동합니다.

  2. 하면 뷰가 모델 클래스에 관찰자가 예를 들어 이벤트를

를받을 경우 모든 IBOutlets는 viewDidUnload

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    self.webView = nil; 
} 
  • 에서 전무로 설정되어 있는지 확인

    model.addObserver(myView); 
    

    및 반드시

    model.removeObserver(myView); 
    

    이 정보가 도움이되기를 바랍니다.

  • +0

    응답 해 주셔서 감사합니다. 정말 고맙습니다. 그것은 결국 해결책으로 이끌어 다른 방향으로 나를 보냈습니다. 나는 꽤 새로운 아이폰 dev에있어 내가 rootViewController를 터뜨리려고했다. 나는 지금 당신이 할 수 없다는 것을 압니다. 다시 한 번 감사드립니다. –

    0

    self.navController에 보유 참조가있는 것처럼 보입니다. 뷰가 pop-up 된 때 방출되도록 어쩌면,

    self.navController =nil; 
    

    어딘가에 적절한 넣어.

    0

    루트보기 컨트롤러가 튀어 나오려고했습니다. 대신 UINavigationController 개체의 setViewControllers 메시지를 사용하여 모든 내 View Controller를 대체했습니다.