32

在我的项目中,它说从不兼容的类型 'id' 分配给 'AppDelegate *'

这究竟是什么?为什么会出现此警告?

我已经在 .m 中声明了

AppDelegate *appdev;

并在 viewDidLoad

{
    appdev = [[UIApplication sharedApplication]delegate];     <= warning here
}

我想隐藏这个警告。我应该怎么办?提前致谢。

4

4 回答 4

87

因为你知道它们相等,所以添加一个强制转换让编译器知道

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

因为这也可能出现在 Swift 中

 let app = UIApplication.shared.delegate as! AppDelegate
于 2013-07-10T05:40:49.213 回答
7

如果你想在任何地方导入 AppDelegate 。很简单。

在应用程序中

/**
 *  Get AppDelegate
 *  Call [AppDelegate getAppDelegate]
 *
 *  @return AppDelegate
 */
+ (AppDelegate *) app {
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

你班上的任何地方

#import "AppDelegate.h" // TOP OF YOUR CLASS

AppDelegate *app = [AppDelegate app];
于 2015-02-11T23:14:38.047 回答
3

您可以对其进行类型转换以防止出现警告消息。

尝试:

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate];
于 2013-07-10T05:37:44.860 回答
1

您需要键入 cast 因为它返回协议。

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate];
于 2013-07-10T05:38:48.330 回答