2011-06-16 27 views
0

我的一个视图控制器依赖于几个类,每个类都有一个initWithDelegate:方法。视图控制器在所有情况下都是委托。我得到的所有调用编译器警告iOS:太多initWithDelegate消息和编译器警告

[[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self]; 

除第(谁的头文件被加载第一)。

所有其他人给出“不兼容的指针类型从yy分配给xx”警告。 yy总是那四个班的第一个。

然而,一切运行良好。那么我如何抑制这些警告?这是LLVM的错误吗?

+0

您应该忽略在alloc之后使用强制转换的所有答案。这显然是错误的做法,尽管我不能告诉你警告的确切原因。 – 2011-06-16 17:01:42

+0

恐怕从调用返回到+ alloc的id参数是编译器警告的确切原因,因此需要强制转换。 – InsertWittyName 2011-06-16 18:31:33

+0

谢谢迈克!我的init方法没有返回id的,但是他们发现的任何类。 – VaVaVoom 2011-06-16 19:36:19

回答

0

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

随意编辑您的问题,包括更多的代码,如果这不能解决问题。

+0

不,我现在知道了..我没有从init方法返回id,而是init方法在任何类的实例.. – VaVaVoom 2011-06-16 19:36:53

0

我发现了一个简单的方法来抑制警告是做到以下几点:

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

此铸使编译器来实现+(ID)ALLOC调用的返回值不是“身份证'但实际上是你的ONE_OF_FOUR_CLASSES。

0

请注意,alloc返回id,因此编译器不知道[CLASS_1 alloc]返回CLASS_1类型的对象。它通常推断类型正确,不会添加警告,但有时不会。我通常的解决方案是演员。丑,但它的作品。

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

Argh ,确实丑陋..但是,它的工作原理。 :-)谢谢马丁。 – VaVaVoom 2011-06-16 19:27:59

+0

对不起,在阅读其他答案后,我不得不选择Eiko的..我的initWithDelegate方法没有返回ID的,但实际的方法被发现的类! – VaVaVoom 2011-06-16 19:35:52