Какао-Touch - замешательство делегата - PullRequest
27 голосов
/ 11 января 2012

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

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, мое второе предупреждение исчезнет.

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

1 Ответ

81 голосов
/ 11 января 2012

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

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

И, держите UITabControllerDelegate.

...