It is necessary to pass the parameter through the intermediate NavController.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"A1"]) { int *param = 999; UINavigationController *destViewController = segue.destinationViewController; tvc3 *destController = [[navigationController viewControllers] objectAtIndex:0]; destController.param = param; It gives errors - does not know navigationController и viewControllers . How else can you?
Update
Replaced string
tvc3 *destController = [[destViewController.navigationController viewControllers] objectAtIndex:0]; destController.param = param; No more swearing. But the parameter does not change in the final controller remains empty.