我有一个名为“Defense”的类,其自定义初始化方法如下:
// initialize the defense unit and add the sprite in the given layer
- (id) initWithType:(DefenseType)tType andInLayer:(CCLayer *)layer {
NSString *fileName;
fileName = [NSString stringWithUTF8String:defenseStructuresFile[tType]];
if ( (self = [super initWithFile:fileName]) ) {
type = tType;
maxHealth = defenseStructuresHealth[tType];
health = maxHealth;
mapRef = (SkirmishMap *)layer;
}
return self;
}
现在我正在使我的类NSCoding
兼容,这需要以下两种方法:
- (id) initWithCoder:(NSCoder *)decoder
- (void) encodeWithCoder:(NSCoder *)encoder
当我通常分配一个“防御”的实例时,我的代码如下:
Defense *twr;
twr = [[Defense alloc] initWithType:type andInLayer:mapRef];
当我想恢复防御对象的保存实例时,我编码为
twr = [[decoder decodeObjectForKey:kDefense] retain];
但是在上面的代码中我不能传递对象非常需要的“type”和“mapref”参数initialize
......
Defense 类派生自CCSprite
并且由于CCSprite
不符合,因此可以从我的方法NSCoding
调用。但我需要参数来确定要传递给initWithFile 的文件名。(self = [super initWithFile:fileName])
initWithCoder
type
ccsprite's
那么在这种情况下我会怎么做呢?我应该改变我的班级设计吗?如果是,如何?
任何好的想法/建议都非常感谢...... :)