0

我很难弄清楚为什么会遇到错误:

CCSprite copyWithZone 无法识别的选择器发送到实例

我想在 Rectangle 对象中保留对 rectangleSprite 的引用。我在 Rectangle.m 文件中合成它。我尝试将 rectangleSprite 存储在 Rectangle 的 rectangleSprite 属性中的方式是否有错误?

矩形.h

#import "CCNode.h"
#import "cocos2d.h"
#import "CCSprite.h"

@interface Rectangle : CCNode
{
    CCSprite *rectangleSprite;    
}

@property(nonatomic,readwrite,copy) CCSprite *rectangleSprite;

@end

CocosScene.m

...
CCSprite *rectangleSprite = [CCSprite spriteWithFile:@"rectangle.png"];
Rectangle *rectangle = [[Rectangle alloc] init];
rectangle.rectangleSprite = rectangleSprite;
...
4

1 回答 1

2

您已将rectangleSprite属性定义为copy。这意味着CCSprite该类必须符合NSCopying协议(这意味着它必须实现该copyWithZone:方法)。

错误表示CCSprite不执行copyWithZone:

如果您只想保留价值,copy请在属性声明中删除。使用strong(或retain正在使用 MRC)而不是copy.

copy当您想在将对象分配给属性时创建对象的副本时使用。但这需要类支持复制。

于 2013-05-15T05:15:56.117 回答