Yes very much possible,
The issue your having is the way you are adding the tabBarController "to the view". I was able to replicate your crashing bug and like you said no helpful warnings are given.
This is how you are doing it (my example is in didFinishLaunching in the appDelegate)
THE INCORRECT WAY
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
UIViewController *vc = [[UIViewController alloc] init];
[vc.view setFrame:self.window.frame];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray* controllers = [[NSMutableArray alloc] init];
for (int i=0; i<10; i++) {
UIViewController * vc1 = [[UIViewController alloc] init];
vc1.title = [NSString stringWithFormat:@"%d", i];
[controllers addObject:vc1];
}
[tabBarController setViewControllers:controllers];
self.window.rootViewController = vc;
[vc.view addSubview:tabBarController.view];
return YES;
The correct way would be to set the tabBarController as the windows rootViewController rather then adding the tabBarControllers view as a subview to your other view.
THE CORRECT WAY (also in didFinishLaunching in the appDelegate)
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray* controllers = [[NSMutableArray alloc] init];
for (int i=0; i<10; i++) {
UIViewController * vc1 = [[UIViewController alloc] init];
vc1.title = [NSString stringWithFormat:@"%d", i];
[controllers addObject:vc1];
}
[tabBarController setViewControllers:controllers];
self.window.rootViewController = tabBarController;
return YES;
Hope this sets you off on the right track. The take away message here is you should not being trying to add viewControllers views as subviews to other viewControllers views.