Cómo implementar didSelectViewController

Quiero capturar el evento cuando alguien cambia entre pestañas. Tengo la siguiente función en mi archivo appdelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UITabBarController * uitbc = [storyboard instantiateViewControllerWithIdentifier:@"tabbarcontroller"];
    uitbc.delegate = self;
    [self.window addSubview:uitbc.view];

    return YES;
}


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"switching");
}

Pero elNSLog(@"switching"); nunca se dispara El xcode emite una advertencia para la línea.uitbc.delegate = self; diciendo "Pasando appdelegate const__strong a un parámetro de tipo de identificación incompatible".

¿Qué estoy haciendo mal? Solo estoy siguiendo la respuesta aceptada que se encuentra aquí, excepto que estoy creando una instancia de mi tabbarcontroller form story board:

Cómo obtener el evento que cambia el menú de pestañas en iPhone

Actualizar Basándome en la sugerencia de Skram, escribí esto para mi delegado de aplicación, pero el NSLOG (Switching) aún no se activa:

@interface johnAppDelegate : UIResponder <UITabBarControllerDelegate>

También actualicé mi didFinishLauchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
tabBarController = self.window.rootViewController.tabBarController;
tabBarController.delegate = self;
[window addSubview:tabBarController.view];
}

Lo bueno es que nada se estrella. También ya no y la advertencia sobre los tipos incompatibles. Pero aún así, didSelectViewController no dispara.

Respuestas a la pregunta(3)

Su respuesta a la pregunta