Objective c 在类方法中调用父类会给我“;“匹配方法签名”;警告

Objective c 在类方法中调用父类会给我“;“匹配方法签名”;警告,objective-c,warnings,parent,signature,Objective C,Warnings,Parent,Signature,我有一个类,其中添加了两个类a和B。在类a中的方法中,我尝试调用类B方法 让我们假设父类是debugZoneScene,debugZoneLayer是class A,而tetraCounter是class B 以下是来自debugZoneLayer(a类)的方法: 它调用该方法,但我得到警告: '-[DebugZoneLayer getHeroVel]: “CCNode”可能不响应“-setttras”(没有匹配方法签名的消息将被假定为返回“id”并接受“…”作为参数。) 我试过用谷歌搜索这个,

我有一个类,其中添加了两个类a和B。在类a中的方法中,我尝试调用类B方法

让我们假设父类是debugZoneScene,debugZoneLayer是class A,而tetraCounter是class B

以下是来自debugZoneLayer(a类)的方法:

它调用该方法,但我得到警告:

'-[DebugZoneLayer getHeroVel]: “CCNode”可能不响应“-setttras”(没有匹配方法签名的消息将被假定为返回“id”并接受“…”作为参数。)


我试过用谷歌搜索这个,但我找不到任何与我的问题完全相关的东西。我正在使用Cocos2D,但我认为这个问题与此没有任何直接关系,并且仍然可以通过了解目标C来解决。有什么想法吗?

你的伪目标非常适合你。。。如果没有关于setttras签名的更多细节,就很难猜测代码中的错误^^


无论如何,您是否导入了TatraCounter类声明的头文件,以便编写此代码的文件知道可用于四计数器对象的方法(及其签名)?

编译器告诉您它认为
debugZoneScene.TetraCounter
CCNode
类型的对象,不管你的
ClassB
是什么。检查
DebugZoneScene
中如何声明和分配
tetraCounter

您可以通过强制执行以下操作使警告消失:

[(ClassB *)(debugZoneScene.tetraCounter) setTetras]; 

这告诉编译器您不在乎它的想法,并且您确定对象是
ClassB
。但是,这并不能解决实际问题。

是的,谢谢,我解决了。写了@class四计数器;在导入下,接口TetraCounter*TetraCounter;中的指针;,属性@属性(非原子,保留)四计数*四计数;,合成了@synthesis tetraCounter;。所以你只做了一个带有@class的类的前向声明?(无论如何,请更新您的问题以提供此类详细信息)。这并没有为编译器提供足够的信息来猜测此类公开的方法。您需要#导入类,而不仅仅是前向声明,在非常特殊的情况下,方法不应以
get
作为前缀。类似地,除非方法是setter/getter对的一部分,否则通常不应该在方法前面加上
set
。谢谢Josh,我的接口指针和属性是不同的!这就是原因。我将对此进行更多的研究,以便更好地理解它。
[(ClassB *)(debugZoneScene.tetraCounter) setTetras];