27

Właśnie rozpocząłem nowy projekt z SDK Xcode 4.2.1 i iOS5. Projekt jest skonfigurowany z ARC. Próbuję ustawić AppDelegate być delegatem na UITabBarController wykonując [tabBarController setDelegate:self]; jeśli to zrobić pojawia się komunikat ostrzegawczy, mówiąc:Cocoa-Touch - Delegacja zamieszania

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

Alright tyle sprawiedliwy, mogę ustawić AppDelegate aby odpowiadały UITabBarControllerDelegate wykonując

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 

Dobrze, ostrzeżenie zniknie.

Teraz otrzymuję kolejny błąd. W kontrolerze widoku Chcę się trzymać z AppDelegate więc zrobić to: AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; ale to uczyni ostrzeżenie mówiąc:

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

Ale jeśli usunę że moja AppDelegate zgodny z protokołem UITabControllerDelegate mój drugi znika ostrzegawcze .

Bardzo dziwne zachowanie, co daje ekspertom od kakao?

Odpowiedz

81

Spróbuj przypisać typecast przed przypisaniem zmiennej AppDelegate.

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

I, zachowaj UITabControllerDelegate.

+1

Oczywiście! Dzięki ... –

+2

Cześć @Aadhira, Rozwiązałem mój błąd, ale nie jestem pewien, czy rozumiem, dlaczego to rozwiązanie działa. Czy mógłbyś mi wytłumaczyć umysł? Dziękuję Ci! – narner

+0

http://stackoverflow.com/questions/14977284/in-objective-c-why-is-casting-eded-przy- -przypisaniu-do -zmiennej-wysokiej-jest Proszę odnieść się do powyższego linku - @narner – Arundev

Powiązane problemy