2014-02-25 2 views
0

내 앱에있는 사람들 초기 대리 컨트롤러가 LoginViewController 또는 MainViewController이어야하는지 결정하는 응용 프로그램 대리자 메서드 application:didFinishLaunchingWithOptions:에 몇 가지 코드가 있습니다.두 번째 ViewController를 모달 표시 한 후 ViewController를 제거합니다.

LoginViewController 경우 먼저 보여되고 사용자가 성공적으로 로그 나는이 코드 조각 모달 MainViewController을 보여

내가 다음에 수행 할 작업을
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"]; 
vc.loginViewController = self; 
[self presentViewController:vc animated:YES completion:nil]; 

MainController가 화면에 보여 후,

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if (self.loginViewController) { 
     [self.loginViewController dismissViewControllerAnimated:NO completion:nil]; 
    } 
} 

문제점 : LoginViewControllerMainViewControllerviewWillApper:animated: 방법 I이 코드를 사용하므로 제거 LoginViewController 메모리로부터 제거 (또는 적어도 시도) 인 이 코드가 MainViewController이 화면에서 제거되고 콘솔에이 오류 메시지가 표시되는 것과 같은 이상한 동작이 발생한다는 것입니다.

Unbalanced calls to begin/end appearance transitions for <LoginViewController: 0xb06e350> 

나는 또한 presentViewController:animated:completion 방법하지만 여전히 행운의 완성 블록에 [self dismissViewControllerAnimated:NO completion:nil]를 호출했는데, 그것은 작동하지 않았다.

내가 뭘 잘못하고 있니? MainViewController이 모달로 표시되면 어떻게 밑에있는 LoginViewController 메모리에서 제거 할 수 있습니까?

답변

1

로그인 컨트롤러를 없애려면 기본보기 컨트롤러를 표시하지 말고 그냥 창의 루트보기 컨트롤러로 설정하십시오.

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"]; 
Self.window.rootViewController = VC; 
+0

이 작동하지만 스위칭 일부 전환과 애니메이션을 선호하는이 같은 시도라고 생각합니다. 그 일을 할 수있는 방법이 있습니까? – BigLex

+0

이 링크에서 애니메이션을 생성하는 방법을 찾았습니다. http://stackoverflow.com/questions/7703806/rootviewcontroller-switch-transition-animation – BigLex

0

할 수 있습니다하지 dismissViewController 그것을 또는 presentingViewController에 다른 하나를 제시 한 후. 여기에서 LoginViewController을 먼저 닫은 다음 MainViewController을 표시해야합니다.

pushViewController을 원할 경우 [self.navigationController setViewControllers: animated:]으로 전화하여 LoginViewController을 삭제할 수 있습니다.

당신이 presentingViewController 그냥 당신이 원하는, application:didFinishLaunchingWithOptions:

if (self.loginViewController) { //Define loginViewController in appDelegate.h 
    [self dismissViewControllerAnimated:NO completion:^{ 
     [self presentViewController:mainViewController animated:YES completion:nil]; 
    }]; 
} 
else{ 
    [self presentViewController:mainViewController animated:YES completion:nil]; 
} 
관련 문제