Iphone 如何符合UITABBARCONTROLLEDELEGATE

Iphone 如何符合UITABBARCONTROLLEDELEGATE,iphone,objective-c,cocoa-touch,uitabbarcontroller,Iphone,Objective C,Cocoa Touch,Uitabbarcontroller,我有一个基于tabbar的应用程序,并执行以下操作以获取对该应用程序委托的引用: MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 这就发出了警告: warning: type 'id <UIApplicationDelegate>' does not conform to the 'UITabBarControllerDelegate' 警告:类型“id”与“uitabarco

我有一个基于tabbar的应用程序,并执行以下操作以获取对该应用程序委托的引用:

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
这就发出了警告:

warning: type 'id <UIApplicationDelegate>' does not conform to the 'UITabBarControllerDelegate' 
警告:类型“id”与“uitabarcontrollerdelegate”不符
我的应用程序委托头如下所示:

#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
#导入
@接口MyAppDelegate:NSObject{
UIWindow*窗口;
UITabBarController*tabBarController;
}
@属性(非原子,保留)IBUIWindow*window;
@属性(非原子,保留)IBUITABBARCONTROLLER*tabBarController;
@结束

.m文件中的唯一方法是ApplicationIDFinishLaunching和dealloc。遵守协议还需要什么?

如果使用
将MyAppDelegate声明为符合UITabBarDelegate,则至少需要实现协议所需的方法

你应该仔细阅读协议的工作原理,以及正式协议和非正式协议之间的区别

您需要实现的符合UITabBarDelegate的方法是

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

这是一个静态警告。这意味着
[[UIApplication sharedApplication]委托]
的返回类型不符合选项卡栏委托协议,这是正确的

强制转换从
[[UIApplication sharedApplication]委托]
返回的值以消除警告:

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

我想插话,因为第二和第三条评论在技术上是不正确的。错误表示AppDelegate不符合UITabBarController委托。关于这件事的答案提到了英国大使馆

苹果和桔子

顺便说一句,Apple示例代码也使用强制转换方法。

“顺便说一句,Apple示例代码也使用强制转换方法。”-Jeff 我认为这不是偶然的。 出现错误,因为委托属性的id为“UIApplicationDelegate”,但由于将其分配给MyAppDelegate(这不仅符合UIApplicationDelegate,而且符合UIAbbarControllerDelegate),因此会收到警告。这就是为什么,如果引入cast
MyAppDelegate appDelegate=(MyAppDelegate)[[UIApplication sharedApplication]委托]
它工作正常。

您是否尝试过查找UITabBarDelegate协议的文档?是的-我注意到苹果没有告诉您需要哪些协议方法。除非我漏掉了。我的意见是,对这个问题的“核对”答案是不正确的。我没有足够的“点数”来否决它……但是在你的实现中隐藏缺陷的施法可能会回来咬你。我投了“贾萨琳”一票。遵守UITabBarDelegate,你就不会再有警告了。我怀疑你误读了最初的过去。错误和代码片段都显示“UITabBarControllerDelegate”。最后一个单词“Delegate”可能已经从StackOverflow的显示边缘滚动了下来,所以您没有看到它。