J'ai récemment procédé à une réorganisation de mon projet et maintenant je ne vois plus mon contrôleur de barre d'onglets, mais la vue de son premier contrôleur de vue apparaît. Voici une ventilation de tout ce qui se passe avant le problème.Mon UITabBarController n'apparaît pas, mais sa première vue est?
App Delegate charge FirstViewController avec nib. FirstViewController charge les données d'application à partir de mon serveur, puis présente MainViewController avec une transition modale. MainViewController est où UITabBarController est censé apparaître. C'est une classe très simple.
Le .h
@interface MainViewController : UIViewController <UITabBarControllerDelegate> {
IBOutlet UITabBarController *tabBarController;
}
@property (nonatomic, retain) UITabBarController *tabBarController;
@end
Le .m
@implementation MainViewController
@synthesize tabBarController;
- (void)viewDidLoad {
NSLog(@"MainViewController viewDidLoad");
//set tab bar controller delegate to self
tabBarController.delegate = self;
// home view
HomeViewController *home = [[HomeViewController alloc] initWithTab];
// menu view
MenuViewController *menu = [[MenuViewController alloc] initWithTab];
// special offers view
SpecialOffersViewController *so = [[SpecialOffersViewController alloc] initWithTab];
// events view
EventsViewController *events = [[EventsViewController alloc] initWithTab];
// info view
InfoViewController *info = [[InfoViewController alloc] initWithTab];
//populate the tab bar controller with view controllers
NSArray *controllers = [NSArray arrayWithObjects:home, menu, so, events, info, nil];
tabBarController.viewControllers = controllers;
//release view controllers
[home release];
[menu release];
[so release];
[events release];
[info release];
[controllers release];
//add tab bar controller to view
[self.view addSubview:tabBarController.view];
[super viewDidLoad];
}
et ici le bit de FirstViewController qui présente la façon modale MainViewController ...
MainViewController *controller = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
[controller release];
Je ne reçois pas toutes les erreurs ou les avertissements du compilateur et l'application s'exécute ... pas de plantage. Il ne montre pas le TabBar reproché, et il était utilisé quand je le créais sur mon AppDelegate. J'ai tout vérifié dans mon NIB et mes prises semblent être branchés ok. Je n'ai aucune idée de ce qui est arrivé. Aidez-moi!
Bon point, mais cela ne l'a pas résolu. Qu'est-ce qui finit par travailler était d'ajouter cela juste avant de définir la vue du contrôleur à la vue tabBarController. cadre CGRect = CGRectMake (self.view.frame.origin.x, \t \t \t \t \t \t \t self.view.frame.origin.y, \t \t \t \t \t \t \t self.view.frame.size .Width, \t \t \t \t \t \t \t self.view.frame.size.height); tabBarController.view.frame = frame; Je l'ai ramassé à partir de googler autour. Il ne semble pas juste que je devrais faire ceci, mais cela fonctionne. –
En fait, [NSArray arrayWithObjects] génère un objet avec retain count 1, et il sera publié une fois dans le futur. Il ne peut pas renvoyer un objet avec retain count = 0 car cela signifierait qu'il est désalloué. –
@Andrei droite. '+ 0' est une convention pour indiquer un objet autoreleased. ('+ 0'! =' 0') –