为什么我收到此错误? CCSprite copyWithZone无法识别的选择器发送到实例

时间:2013-05-15 05:12:07

标签: objective-c cocos2d-iphone

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

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

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

Rectangle.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;
...

1 个答案:

答案 0 :(得分:2)

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

该错误表示CCSprite未实现copyWithZone:

如果您只想保留该值,请在属性声明中删除copy。使用strong(或retain使用的是MRC)代替copy

如果要在将对象分配给属性时创建对象的副本,则只能使用copy。但这需要该类支持复制。