Проблема с popViewController и pushController

Я столкнулся с проблемой перенаправления viewControllers с помощью pop/pushViewControllers. У меня есть три контроллера вида, как на картинке ниже -

Контроль потока

На мой третий взгляд у меня есть некоторые ToggleButton на основании этого toggleButton данные, которые находятся в 2nd View, изменятся. После изменения чего-либо на третьем экране и нажмите Done Кнопка в моем третьем представлении я только что начал свой второй ViewController с помощью pushViewController И изменения произошли успешно.

Но проблема заключалась в том, что когда я пытаюсь нажать кнопку "Назад" на второй странице просмотра, она снова перенаправляет меня на третий viewController (из-за pushViewController)

Я пытаюсь начать свой второй вид с помощью popViewController но это дает исключение.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.

Я использовал ниже код -

SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
second.array = resultArray;
second.indexValue = ind;
[self.navigationController popToViewController:second animated:YES];

Как мне решить эту проблему? Любая идея?

4 ответа

Решение

Из третьего viewcontroller вам просто нужно вызвать этот метод для перехода ко второму viewcontroller:

[self.navigationController popViewControllerAnimated:YES];

РЕДАКТИРОВАТЬ:

Для уведомления второго vc об изменении данных вы можете использовать делегат. Следить за этим:

На ThirdViewController.h

@protocol DataChangeProtocol;
@interface ThirdViewController : UIViewController

@property(nonatomic,assign) id<DataChangeProtocol> delegate;

@end


@protocol DataChangeProtocol

- (void)thirdViewcontroller:(ThirdViewController*)vc dataChangedto:(NSDictionary *)changedData;

@end

И прежде чем нажать thridVC из secondVC, назначьте secondVC в качестве делегата третьего VC:

ThirdViewController *thirdVC = [[ThirdViewController alloc]init..];
thirdVC.delegate = self;
[self.navigationController pushViewController:thirdVC animated:YES];

и в SecondViewController.m

- (void)thirdViewcontroller:(ThirdViewController*)vc dataChangedto:(NSDictionary *)changedData {
 // Change your values in the UI using the passed value from changedData.

}

Вы создаете наш viewcontroller:

SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

и затем вы хотите извлечь его из стека, но этот контроллер не находится в стеке, потому что вы создаете его в третьем viewController.

    //it used in first class
     SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
second.array = resultArray;
second.indexValue = ind;
    [self.navigationController pushViewController:second animated:YES];
    //it move to second class

    //it used in second class
    [self.navigationController popViewControllerAnimated:YES];
    //it move to firsr class

Если вы хотите перейти к вашему текущему предыдущему контроллеру представления, вам нужно сделать это:

[self.navigationController popViewControllerAnimated:YES];
Другие вопросы по тегам