以下のようなカスタムinitメソッドを持つ「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
を互換性のあるものにしています。これには、次の2つのメソッドが必要です。
- (id) initWithCoder:(NSCoder *)decoder
- (void) encodeWithCoder:(NSCoder *)encoder
通常、「防御」のインスタンスを割り当てるときは、次のようにコーディングします。
Defense *twr;
twr = [[Defense alloc] initWithType:type andInLayer:mapRef];
保存したDefenseオブジェクトのインスタンスを復元したい場合は、次のようにコーディングします。
twr = [[decoder decodeObjectForKey:kDefense] retain];
initialize
しかし、上記のコードでは、オブジェクトに非常に必要な「type」パラメーターと「mapref」パラメーターを渡すことができません。
Defenseクラスはから派生し、に準拠しCCSprite
てCCSprite
いないため、私のメソッドNSCoding
から呼び出すのは問題ありません。ただし、initWithFileに渡すファイル名を決定するためのパラメーターが必要です。(self = [super initWithFile:fileName])
initWithCoder
type
ccsprite's
それで、私はこの状況で何をしますか?クラスのデザインを変更する必要がありますか?はいの場合、どのように?
良いアイデア/提案は大歓迎です...:)