Xcode中的错误读取:将CGPoint(又名'struct CGPoint')发送到不兼容类型的参数'void *'
我正在做的是:
CCSprite* coordinate= path[i];
CGPoint posSending = coordinate.position;
id handleTail = [CCCallFuncND actionWithTarget:self selector:@selector(handleTail:)data:posSending];
//handleTail
-(void)handleTail:(CGPoint)pos{
}
导致此错误的原因是什么?
答案 0 :(得分:1)
CCCallFuncND不适用于结构类型(也不适用于ARC)。
使用块版本,更容易,更强大:
CGPoint posSending = coordinate.position;
id handleTail = [CCCallBlock actionWithTarget:self block:^{
// do something with posSending:
someNode.position = posSending;
}];
仅供参考,错误是因为您尝试将CGPoint
类型分配给void*
类型。即使你通过传递地址运算符(&posSending
)来使用CGPoint的地址,你也会在handleTail方法中收到垃圾。到调用该方法时,由于在堆栈上创建了posSending,因此指向posSending的指针不再有效。
有人可能会认为malloc的CGPoint会起作用,而且确实如此 - 然而它使用起来并不安全,因为无法保证会调用handleTail方法(由于场景更改或stopAction调用) 。因此,不能保证接收方法实际上可以释放该malloc指针。
此外,您的handleTail方法声明不正确,它会收到一个void *参数:
-(void)handleTail:(void*)data
{
}
所有这一切,一条道路:随时随地使用街区。