Можно напрямую манипулировать стеком контроллера представления независимо от сегментов или раскадровок приложения.
Вы можете использовать эту технику для восстановления большого стека контроллеров вида и выполнения / анимации всего лишь одного перехода к контроллеру вида сверху. (Для этой цели вам, вероятно, потребуется создать специальный push-переход.)
Например, чтобы восстановить стек контроллера двух представлений, вы можете сделать следующее. В этом примере предполагается, что какое-то действие на существующем контроллере представления приводит к восстановлению состояния, но вы можете так же легко выполнить это из своего делегата приложения.
[self performSegueWithIdentifier:@"Page2Express" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Page2Express"])
{
// Get any state data you need to from Core Data
CoreDataType *valuePulledFromCoreData = // ...
// Set up the page 2 view controller as you normally would
Page2ViewController *page2ViewController = segue.destinationViewController;
page2ViewController.instanceVariable = valuePulledFromCoreData;
// Create a loose, page 1 view controller and set it up as required
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
Page1ViewController *page1ViewController = [storyboard instantiateViewControllerWithIdentifier:@"Page1ViewController"]; // Ensure you have this identifier set up in your storyboard
page1ViewController.instanceVariable = valuePulledFromCoreData;
// Add the page 1 view controller to the top of the navigation stack (to be later obscured in the segue by the page 2 view controller)
NSMutableArray *viewControllers = [[self navigationController].viewControllers mutableCopy];
[viewControllers addObject:page1ViewController];
[self navigationController].viewControllers = viewControllers;
}
}
Если вместо этого вы предпочитаете не использовать анимацию, тогда все равно проще. Вы можете восстановить состояние только путем манипулирования стеком контроллера представления (и без использования каких-либо сегментов) из - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
и - (void)applicationWillEnterForeground:(UIApplication *)application
.
В любом случае, все будет работать гладко и в тандеме с вашими существующими раскадровками и сегментами.