我刚刚开始运行Xcode 4.2.1和iOS5 SDK的新项目。该项目是使用ARC设置的。我正在尝试通过执行[tabBarController setDelegate:self];
将AppDelegate设置为UITabBarController的委托,如果我这样做,我会收到一条警告消息:
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协议,我的第二个警告就会消失。
非常奇怪的行为,是什么让Cocoa专家?
答案 0 :(得分:81)
在分配AppDelegate变量之前尝试进行类型转换。
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
并保持UITabControllerDelegate
。