0

Xcode 中的错误为:将 CGPoint (aka '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{

}

是什么导致了这个错误?

4

1 回答 1

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'ing CGPoint 会起作用,并且确实如此 - 但是使用起来并不安全,因为无法保证会调用 handleTail 方法(由于场景更改或 stopAction 调用)。因此,不能保证接收方法实际上可以释放那个 malloc 的指针。

此外,您的 handleTail 方法声明不正确,它接收一个 void* 参数:

-(void)handleTail:(void*)data
{
}

所有这一切,一个要点:随时随地使用积木。

于 2013-03-02T23:24:27.080 回答