detectar cuándo se presiona un elemento tabBar a través de UITabBarController desde App Delegate

Sé que esta pregunta se ha hecho varias veces, pero todavía estoy atrapado en el caso cuando tengo mi UITabBarController en mi class AppDelegate y viewControllers están configurados allí solo como

 self.tabBarController.viewControllers = @[aboutUsNavController,myProfileNavController, projectsListNavController, feedsNavController,homeViewController]; 

Ahora lo que quiero es realizar una tarea al toque de TabBar item feedsNavController no en viewWillAppear (porque está presionando un detailView través de navigationController ).

He configurado el delegado en la misma class para realizar un método de delegado UITabBarController :

  AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shanetworkingApplication] delegate]; appDelegate.tabBarController.delegate = self; 

Pero -(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController solo funciona cuando cambio el TabBar Item, pero no en la primera vez ?

¿Hay alguna forma en que puedo llamar a UITabBarDelegate en UITabBarDelegate lugar:

 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 

para get la reference cuando se presiona el tabBar item ?

O cualquier otro enfoque sería apreciado.

Imaginé el path para hacerlo:

En realidad, el método UITabBarControllerDelegate solo se llama una vez que se carga esa pestaña particular.

Por lo tanto, realicé la tarea [self getFeedsFromServer]; en viewDidLoad (por primera vez), y luego de nuevo en

 -(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"Selected INDEX OF TAB-BAR ==> %i", tabBarController.selectedIndex); if (tabBarController.selectedIndex == 3) { [self getFeedsFromServer]; } } 

¡Funciona como quería!

Si desea realizar la tarea 1 vez, entonces ViewDidLoad es lo mejor para ello. Las llamadas de ViewWillAppear cada vez que su ViewController se enfoca pero se llama a ViewDidLoad justo cuando empuja ese controller en la stack.

¿Qué quieres decir con 'porque empuja un detailView a través de navigationController'? Tu pregunta no es tan clara.

Pero tal vez esto me ayude por mi comprensión:

 - (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController { NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController]; NSLog(@"Tab index = %u (%u)", indexOfTab); }