Cocoa-Touch - 代表混淆

时间:2012-01-11 13:33:10

标签: objective-c cocoa-touch delegates automatic-ref-counting uiapplicationdelegate

我刚刚开始运行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专家?

1 个答案:

答案 0 :(得分:81)

在分配AppDelegate变量之前尝试进行类型转换。

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

并保持UITabControllerDelegate