27

Я только что начал новый проект с Xcode 4.2.1 и iOS5 SDK. Проект настроен с помощью ARC. Я пытаюсь установить AppDelegate быть делегатом UITabBarController, делая [tabBarController setDelegate:self];, если я делаю это я получаю предупреждение говоря:Cocoa-Touch - Недовольство делегата

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

Хорошо достаточно справедливо, я поставил свою AppDelegate, чтобы соответствовать UITabBarControllerDelegate делая

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 

Отлично, предупреждение уходит.

Теперь я получаю еще одну ошибку. В контроллере представления я хочу ухватить в AppDelegate, так что я это сделать: AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];, но это сделает предупреждение о том:

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

Но если я удалю, что мой AppDelegate соответствует протоколу UITabControllerDelegate мои второе предупреждение исчезает ,

Очень странное поведение, что дает экспертам по какао?

ответ

81

Попробуйте сделать тип перед назначением переменной AppDelegate.

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

И, держите UITabControllerDelegate.

+1

Конечно! Спасибо ... –

+2

Привет @Aadhira, Это решило мою ошибку, но я не уверен, что понимаю, почему решение работает. Не могли бы вы или кто-нибудь мне объяснить? Спасибо! – narner

+0

http://stackoverflow.com/questions/14977284/in-objective-c-why-is-casting-needed-when-assigning-to-a-variable-whose-type-is Пожалуйста, обратитесь к приведенной выше ссылке - @narner – Arundev