Cocoa-touch-Delegado Confusión
Pregunta
Acabo de comenzar un nuevo proyecto que ejecuta Xcode 4.2.1 e iOS5 SDK. El proyecto está configurado con ARC. Estoy tratando de establecer el AppDelegate para que sea el delegado de UITABBarController haciendo [tabBarController setDelegate:self];
Si hago eso, recibo un mensaje de advertencia que dice:
warning: Semantic Issue: Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id<UITabBarControllerDelegate>'
Muy bien justo, configuré mi appdelegate para que se ajuste al uitabBarControllerDelegate haciendo
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
Genial, la advertencia desaparece.
Ahora recibo otro error. En un controlador de vista, quiero obtener el control del AppDelegate, así que hago esto: AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
Pero esto hará una advertencia diciendo:
warning: Semantic Issue: Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id<UIApplicationDelegate>'
Pero si elimino que mi AppDelegate se ajusta al protocolo UITABControllerDelegate, mi segunda advertencia desaparece.
Comportamiento muy extraño, ¿qué les da a los expertos en cacao?
Solución
Intente hacer un Typecast antes de asignar la variable AppDelegate.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Y, mantenga el UITabControllerDelegate
.