Tout d'abord, si jamais vous vous trouvez en tapant ceci:
(myAppAppDelegate *)[[UIApplication sharedApplication] delegate]
Vous pouvez probablement bénéficier d'une meilleure conception. Ce code provient probablement d'un contrôleur de vue, auquel cas vous appelez le délégué de l'App à partir d'un contrôleur de vue, et vous traitez des choses dont vous ne devriez pas avoir connaissance (la barre d'onglets).
Une meilleure conception consiste à déléguer au délégué de l'application, et le délégué de l'application bascule l'onglet pour vous. Le délégué de l'application devrait avoir des références aux contrôleurs de vue réelle dans la barre d'onglets (vous pouvez brancher ces via IB sinon) afin que vous puissiez appeler setSelectedViewController:
avec l'objet correct, plutôt que l'indexation dans le tableau de la barre d'onglets:
/* Somewhere in the app delegate */
- (void)selectFooBarController {
[self.tabBar setSelectedViewController:self.fooBarController];
}
maintenant, si vous ne voulez pas vous embêter avec la délégation, vous pouvez simplement mettre une méthode sur le délégué de l'application (comme celle ci-dessus) et votre code d'origine devient:
myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate]
[appDel selectFooBarController];
Encore une fois, vous devrez ajouter des propriétés IBOutlet à votre délégué d'application que vous vous connectez à fooBarController etc. dans Interface Builder. Cela vous permettra de les référencer directement plutôt que de les extraire d'un tableau.