Проблема с 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];