If you use Storyboard, use pushViewController method is a bad choice (also if it work). You have to insert a "segue". Go in the storyboard and while press ctrl button, click on the main controller (which must open the tabViewController) and then release the click on the tabBarController.
Now you have the segue. Click on the circle which appears and choose an identifier for this segue, for example: MainToTab .
Now in your method, you have just to call:
[self performSegueWithIdentifier:@"MainToTab" sender:self];
Moreover, if you want manage the property on the destination controller (by segue), you can implement this method:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"MainToTab"]) {
UITabViewController *tb = (UITabViewController *)segue.destinationViewController;
//set the properties...
}
}
This method is called automatically when you launch the previous method.