27

Acabo de iniciar un nuevo proyecto ejecutando Xcode 4.2.1 y iOS5 SDK. El proyecto está configurado con ARC. Estoy tratando de establecer el AppDelegate ser el delegado de UITabBarController haciendo [tabBarController setDelegate:self]; si hago lo que me sale un mensaje de advertencia diciendo:Cocoa-Touch - Delegación confusión

warning: Semantic Issue: Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id<UITabBarControllerDelegate>' 

bien justo lo suficiente, me puse mi AppDelegate para ajustarse a la UITabBarControllerDelegate haciendo

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 

Genial, la advertencia desaparece.

Ahora recibo otro error. En un controlador de vista quiero obtener una bodega de la AppDelegate así hago esto: AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; pero esto tomará una advertencia diciendo:

warning: Semantic Issue: Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id<UIApplicationDelegate>' 

Pero si quito que mi AppDelegate cumpla con el protocolo UITabControllerDelegate mis segundos desaparece de advertencia .

Comportamiento muy extraño, ¿qué le da a los expertos de Cocoa?

Respuesta

81

Intente hacer un tipo de transmisión antes de asignar la variable AppDelegate.

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

Y, mantenga el UITabControllerDelegate.

+1

¡Por supuesto! Gracias ... –

+2

Hola @Aadhira, Esto resolvió mi error, pero no estoy seguro de entender por qué funciona la solución. ¿Le importaría a usted o a alguien explicarme? ¡Gracias! – narner

+0

http://stackoverflow.com/questions/14977284/in-objective-c-why-is-casting-needed-when-assigning-to-a-a-variable-whose-type-is Consulte el enlace anterior - @narner – Arundev