Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 分配给';AppDelegate*';来自不兼容类型';id<;UIApplicationLegate>';_Iphone_Ios_Objective C - Fatal编程技术网

Iphone 分配给';AppDelegate*';来自不兼容类型';id<;UIApplicationLegate>';

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];您可以键入强制转换以防止

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

这到底是什么?为什么会出现这种警告

我已经申报了

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];