我的一个视图控制器依赖于几个每个都有initWithDelegate:方法的类。视图控制器在所有情况下都是委托。我在所有对
的调用中收到编译器警告[[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self];
除了第一个(首先加载谁的头文件)。
所有其他人都给出了“从yy分配给xx的不兼容指针类型”警告。 yy永远是4个班级中的第一个。
然而,一切都运行良好。那么如何抑制这些警告呢?这是一个LLVM错误吗?答案 0 :(得分:0)
听起来好像类型不匹配或编译器不知道。不要忘记将init
- 方法的签名添加到.h文件中并导入它们。检查他们是否返回id
,delegate
的类型为id
(至少大部分时间都是这样)。
如果不能解决问题,请随意编辑您的问题以包含更多代码。
答案 1 :(得分:0)
我发现一种简单的方法来抑制警告就是执行以下操作:
[(ONE_OF_FOUR_CLASSES *)[ONE_OF_FOUR_CLASSES alloc] initWithDelegate:self];
这个强制转换使编译器能够实现+(id)alloc调用的返回值不是'id',而实际上是你的ONE_OF_FOUR_CLASSES。
答案 2 :(得分:0)
请注意alloc
返回id
,因此编译器不知道[CLASS_1 alloc]返回CLASS_1类型的对象。它通常推断类型正确,不添加警告,但有时它不会。我通常的解决方案是演员。丑陋,但它确实有效。
[(CLASS_1*)[CLASS_1 alloc] initWithDelegate:self];