Какао-прикосновение-путаница делегатов


Я только что запустил новый проект под управлением 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 27

1 ответ:

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

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

И, храните UITabControllerDelegate.