Iphone 分配给';AppDelegate*';来自不兼容类型';id<;UIApplicationLegate>';
在我的项目中,它说从不兼容的类型“id”分配给“AppDelegate*” 这到底是什么?为什么会出现这种警告 我已经申报了Iphone 分配给';AppDelegate*';来自不兼容类型';id<;UIApplicationLegate>';,iphone,ios,objective-c,Iphone,Ios,Objective C,在我的项目中,它说从不兼容的类型“id”分配给“AppDelegate*” 这到底是什么?为什么会出现这种警告 我已经申报了 AppDelegate *appdev; 在viewDidLoad中 { appdev = [[UIApplication sharedApplication]delegate]; <= warning here } { appdev=[[UIApplication sharedApplication]delegate];您可以键入强制转换以防止
AppDelegate *appdev;
在viewDidLoad中
{
appdev = [[UIApplication sharedApplication]delegate]; <= warning here
}
{
appdev=[[UIApplication sharedApplication]delegate];您可以键入强制转换以防止出现警告消息
尝试:
您需要键入cast,因为它返回协议
appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate];
因为您知道它们相等,所以添加一个cast让编译器知道
AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication]delegate];
因为这可能也会在斯威夫特出现
let app = UIApplication.shared.delegate as! AppDelegate
如果您想在任何地方导入AppDelegate,这很简单
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];
我只是想知道,因为我没有从您的代码中得到任何警告。您使用的是哪个Xcode版本?我正在将appdelegate共享给其他viewcontroller以进行事件处理。通过导入#appdelegate.h并声明appdelegate*xyz,我得到了此警告。现在,我使用以下答案修复了此警告。嗯,我使用的是最新的Xcode 4.6.3Strange,如果做同样的事情。当然,显式类型转换为“fix”警告,但我仍然想知道为什么这对你来说是必要的,而对我来说不是。-AppDelegate是否声明为@interface AppDelegate:UIResponder
?是否您的AppDelegate声明为@interface AppDelegate:UIResponder
?-那么这将是正确的解决方案。我不确定这是否是正确的示例规划。将id objB
分配给AppDelegate*objA
不会在我的代码中生成警告(仅相反)。事实上,我没有从问题中得到关于代码的警告。肯定还有其他原因……不需要显式强制转换。我假设AppDelegate声明为符合附加协议,比较。对我来说非常有效!在objC和swift中,您不必将getter命名为“getXY”@Daij Djan我已更改响应神经元特异性烯醇化酶
#import "AppDelegate.h" // TOP OF YOUR CLASS
AppDelegate *app = [AppDelegate app];