Как соответствовать UITabBarControllerDelegate - PullRequest
6 голосов
/ 06 февраля 2010

У меня есть приложение на основе вкладок и для получения ссылки на делегата приложения выполните следующие действия:

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

Который затем выдает это предупреждение:

warning: type 'id <UIApplicationDelegate>' does not conform to the 'UITabBarControllerDelegate' 

Мой заголовок делегата приложения выглядит так:

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>     {
UIWindow *window;
UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

Единственными методами в файле .m являются applicationDidFinishLaunching и dealloc. Что еще мне нужно, чтобы соответствовать протоколу?

Ответы [ 4 ]

14 голосов
/ 06 февраля 2010

Это статическое предупреждение.Это означает, что тип возвращаемого значения [[UIApplication sharedApplication] delegate] не соответствует протоколу делегата панели вкладок, который является истинным.

Приведите значение, возвращенное из [[UIApplication sharedApplication] delegate], чтобы избавиться от предупреждения:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
2 голосов
/ 06 февраля 2010

Если вы объявите MyAppDelegate как соответствующий UITabBarDelegate, используя <UITabBarDelegate>, то вам необходимо реализовать хотя бы требуемые методы протокола.

Вы должны прочитать о том, как работают протоколы, и о различиях между формальными и неформальными протоколами.

Метод, который необходимо реализовать для соответствия UITabBarDelegate:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
1 голос
/ 14 мая 2010

Я хотел бы принять участие, потому что второй и третий комментарии технически некорректны. Ошибка говорит о том, что AppDelegate не соответствует делегату UITabBarController. Ответы об упоминании UITabBarDelegate.

яблоки и апельсины.

Кстати, в примере кода Apple также используется метод приведения.

0 голосов
/ 01 февраля 2011

"Кстати, в примере кода Apple также используется метод приведения." - Джефф Я думаю, что это не случайно. Ошибка возникает, потому что свойство делегата является идентификатором «UIApplicationDelegate», однако выдается предупреждение, потому что он назначает его для MyAppDelegate, который соответствует не только UIApplicationDelegate, но и UITabBarControllerDelegate. Вот почему, если кто-то вводит приведение
MyAppDelegate appDelegate = (MyAppDelegate ) [[UIApplication sharedApplication] делегат]; это работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...