2014-09-25 6 views
1

Мое приложение содержит некоторые UIViewControllers. Первая - это страница входа в систему, вторая - «Страница меню», а третья - viewController.popToRootViewControllerAnimated заставляет мое приложение сбой

я поставил функцию выхода из системы на кнопках на каждой странице, с alertView, как это:

- (IBAction)logout:(id)sender { 
    UIAlertView *logoutConfirm = [[UIAlertView alloc] initWithTitle: @"Logout" message: @"Sure ? " delegate: self cancelButtonTitle: @"Ok" otherButtonTitles:@"Cancel", nil]; 

    [logoutConfirm show]; 
} 

// Logout 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    // Logs to track the bug 
    NSLog(@"LOG :%@", [self.navigationController viewControllers]); 
    NSLog(@" LOG 2 : %@", [self.navigationController.viewControllers objectAtIndex:0]); 

    if (buttonIndex == 0) { 
     [self.navigationController popToRootViewControllerAnimated:NO]; 
    } 
} 

popToRootViewControllerAnimated делает сбой приложения на третьем ViewController, но не второе с этим сообщением:

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'adding a root view controller <MainViewController: 0xXXXXXX> as a child of view controller:<UINavigationController: 0xXXXXXX>' 

Есть мои журналы:

2014-09-25 10:24:35.074 Poject[18594:654203] LOG :(
    "<MainViewController: 0xXXXXXXX>", 
    "<secondViewController: 0xXXXXXXX>", 
    "<thirdViewController: 0xXXXXXXX>" 
) 
2014-09-25 10:24:35.075 Poject[18594:654203] LOG 2 : <MainViewController: 0xXXXXXXX> 

Кажется, я добавляю в UIViewController, но просто хотел вернуться к 1-й ViewController ... Я думаю, что это странно, если это работа на втором ViewController, но не третий ...

UPDATE

@mehul патель сказал мне, чтобы прокомментировать эту строку в моей AppDelegate.h:

[self.window addSubview:self.navigationController.view]; 

Потому что:

Вы не можете добавить вас г RootViewController, как подвид в окно, он будет врезаться в любом случае

Но теперь, pushViewController на кнопку «Вход» в моем firstViewController больше не работает. Он ничего не делает, поэтому я NSLog контроллерах массив моего navigationController

Первый раз я получил:

2014-09-25 16:48:07.512 Project[22023:780717] (
    "<MainViewController: 0xf81f290>" 
) 

Второй раз я получил:

2014-09-25 16:48:12.104 Project[22023:780717] (
    "<MainViewController: 0xf81f290>", 
    "<MenuSelectionViewController: 0xd929030>" 
) 

Но вид не меняется. ..

Благодарим за помощь!

+0

вы используете pushViewController: всегда правильно? – Fattie

+0

@JoeBlow Да, я: [self.navigationController pushViewController: myViewController animated: YES]; – Ritooon

+0

@Ritooon: попробуйте вызвать popToRootViewControllerAnimated с задержкой. что может помочь. – Deepak

ответ

1

Попробуйте один

- (void) logout { 

    @try { 
     NSArray *controllers = [self.navigationController viewControllers]; 

     if (controllers && [controllers count] > 0) { 
      UIViewController *loginController = [controllers objectAtIndex:0]; 
      [self.navigationController popToViewController:loginController animated:YES]; 
     } 
    } 
    @catch (NSException *exception) { 
      // Throws an exception 
    } 
} 
+0

Не работает, я поставил NSLog в состояние «если» и один в @catch, и я получил 2 журнала ... Странно нет? – Ritooon

+0

Поместите эту строку в блок исключений, дайте мне знать, какое исключение создано: NSLog (@ "исключение:% @", exception.debugDescription); – Kampai

+0

Я получил это исключение: описание исключения: добавление контроллера корневого представления в качестве дочернего элемента контроллера: Ritooon

0

У нас был довольно старый кусок кода в AppDelegate:didFinishLaunchingWithOptions

self.window.rootViewController = self.rootViewController; 
[self.window addSubview:self.navigationController.view]; 

Эти две линии должны были быть удалены, и мы добавили:

self.window.rootViewController = navigationController; 

Это решает проблему, и она работает для iOS7 и iO S8.

+0

Я попробую это решение. И скоро вы получите отзыв. – Ritooon

Смежные вопросы