我继承了CCSpriteBatchNode来创建一个符合NSCoding的对象。我主要对CCSpriteBatchNode的字符串名称感兴趣。在设置了断点之后,我意识到对象的字符串名总是为nil。我有一种感觉,我的被覆盖的方法可能是一个促成因素,但我不是很确定。请参考以下相关代码:
SpriteBatchNode接口:
@interface SpriteBatchNode: CCSpriteBatchNode {
NSString* batchImageName;
}SpriteBatchNode实现:
const NSUInteger defCapacity = 29;
@implementation SpriteBatchNode
@synthesize batchImageName;
+(id)batchNodeWithFile:(NSString*) imageFile
{
return [[self alloc] initWithFile:imageFile capacity:defCapacity];
}
-(id)initWithFile:(NSString *)fileImage {
self = [super initWithFile:fileImage capacity:defCapacity];
if (!self) return nil;
batchImageName = fileImage;
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
NSString* spriteBatchNodeFileImage = [[aDecoder decodeObjectForKey:@"batchImageName"] copy];
self = [super initWithFile:spriteBatchNodeFileImage capacity:defCapacity];
if (!self) return nil;
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:batchImageName forKey:@"batchImageName"];
}
@end发布于 2013-11-16 21:19:29
如果你没有使用ARC,我在这里看到两个问题:
除此之外,你使用的是一种不同寻常的init风格,常见的风格是:
if (self)
{
batchImageName = fileImage;
}
return self;检查self是否为nil,如果是,则返回nil,这有点多余。
https://stackoverflow.com/questions/20017911
复制相似问题