Во-первых, вы никогда не хотите создавать подклассы UINavigationController или UITabBarController.
Во-вторых, я не совсем понял, что вы сделали, но правильная последовательность создания контроллера навигации внутри контроллера панели вкладок выглядит примерно так:
// in MyAppDelegate.h
UINavigationController *nc1, *nc2;
FirstTabRootViewController *vc1;
SecondTabRootViewController *vc2;
UITabBarController *tbc;
// in MyAppDelegate.m
nc1 = [[UINavigationController alloc] init];
vc1 = [[FirstTabRootViewController alloc] initWithNibName:nil bundle:nil];
vc1.tabBarItem.title = @"Tab 1";
vc1.tabBarItem.image = [UIImage imageNamed:@"tab1.png"];
vc1.navigationItem.title = "Tab 1 Data";
nc1.viewControllers = [NSArray arrayWithObjects:vc1, nil];
nc2 = [[UINavigationController alloc] init];
vc2 = [[SecondTabRootViewController alloc] initWithNibName:nil bundle:nil];
vc2.tabBarItem.title = @"Tab 2";
vc2.tabBarItem.image = [UIImage imageNamed:@"tab2.png"];
vc2.navigationItem.title = "Tab 2 Data";
nc2.viewControllers = [NSArray arrayWithObjects:vc2, nil];
tbc = [[UITabBarController alloc] init];
tbc.viewControllers = [NSArray arrayWithObjects:nc1, nc2, nil];
Обратите внимание, что ваш контроллер представления управляет текстом / значком на панели вкладок и на панели навигации. Создайте экземпляр UINavigationController для каждой из ваших вкладок; UINavigationController содержит стек контроллеров представления (см. Свойство viewControllers), который должен содержать хотя бы один элемент - ваш корневой контроллер для этой вкладки. Также создайте UITabBarController для управления вкладками.
Конечно, вы можете (и, вероятно, должны) использовать конструктор интерфейса вместо кода для создания экземпляров упомянутых классов и установки свойств. Но важно, чтобы вы понимали, что происходит за кулисами; Конструктор интерфейсов - не более чем удобный способ создания и настройки объектов.
Надеюсь, это полезно; Пожалуйста, уточните свой вопрос, если это не так.