Как соответствовать UITabBarControllerDelegate

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

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. Чему еще я должен приспособить протоколу?

6
задан 4thSpace 6 February 2010 в 20:34
поделиться

3 ответа

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

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

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
14
ответ дан 8 December 2019 в 13:45
поделиться

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

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

Для соответствия UITabBarDelegate вам нужно реализовать метод

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
2
ответ дан 8 December 2019 в 13:45
поделиться

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

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

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

1
ответ дан 8 December 2019 в 13:45
поделиться