Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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 iOS:initWithDelegate消息和编译器警告太多_Iphone_Ios_Delegation - Fatal编程技术网

Iphone iOS:initWithDelegate消息和编译器警告太多

Iphone iOS:initWithDelegate消息和编译器警告太多,iphone,ios,delegation,Iphone,Ios,Delegation,我的一个视图控制器依赖于几个类,每个类都有一个initWithDelegate:方法。视图控制器在所有情况下都是代理。我在对的所有调用中都收到编译器警告 [[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self]; 除了第一个(首先加载谁的头文件) 所有其他的都给出“从yy分配给xx的指针类型不兼容”警告。yy始终是4个类中的第一个 不过,一切都很顺利。那么如何抑制这些警告呢?这是一个LLVM错误吗?听起来好像类型不匹配或者编译器不知道。不要忘记将

我的一个视图控制器依赖于几个类,每个类都有一个initWithDelegate:方法。视图控制器在所有情况下都是代理。我在对的所有调用中都收到编译器警告

[[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self];
除了第一个(首先加载谁的头文件)

所有其他的都给出“从yy分配给xx的指针类型不兼容”警告。yy始终是4个类中的第一个


不过,一切都很顺利。那么如何抑制这些警告呢?这是一个LLVM错误吗?

听起来好像类型不匹配或者编译器不知道。不要忘记将
init
-方法的签名添加到.h文件中并导入它们。检查它们是否返回
id
,以及
delegate
是否也是
id
类型(至少大多数情况下这是您想要的)


如果这还不清楚,请随意编辑您的问题以包含更多代码。

我发现抑制警告的一个简单方法是执行以下操作:

[(四个类中的一个*)[四个类中的一个alloc]initWithDelegate:self]


此强制转换使编译器能够实现+(id)alloc调用的返回值不是'id',而是四个类中的一个类。

注意
alloc
返回
id
,因此编译器不知道[CLASS\u 1 alloc]返回CLASS\u 1类型的对象。它通常正确推断类型,并且不添加警告,但有时不添加警告。我通常的解决办法是投石膏。很难看,但很管用

[(CLASS_1*)[CLASS_1 alloc] initWithDelegate:self];

您应该忽略所有在alloc之后使用强制转换的答案。这显然是错误的做法,尽管我不能告诉您警告的确切原因。我担心调用+alloc返回的id参数是编译器警告的确切原因,因此需要强制转换。谢谢Mike!我的init方法没有返回id,而是返回在中找到的任何类。抱歉,在阅读了其他答案后,我不得不选择Eiko的。。我的initWithDelegate方法没有返回id,但返回的是该方法所在的实际类!不,我现在知道了。。我没有从init方法返回id,而是返回init方法所在的任何类的实例。。