Подклассный объект CCSpriteBatchNode равен nil
Я подклассифицировал CCSpriteBatchNode, чтобы создать объект, соответствующий NSCoding. В основном меня интересовало имя строки CCSpriteBatchNode. После установки точек останова я понял, что имя строки объекта всегда равно нулю. У меня есть чувство, что мои переопределенные методы могут быть способствующим фактором, но я не совсем уверен в этом. Пожалуйста, смотрите соответствующий код ниже:
Интерфейс 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
1 ответ
Если вы не используете ARC, я вижу здесь две проблемы:
- Строка batchImageName не сохраняется
- batchNodeWithFile: не отправляет авторелиз в возвращенный экземпляр
Кроме того, что вы используете необычный стиль инициализации, общий стиль таков:
if (self)
{
batchImageName = fileImage;
}
return self;
Проверка себя на ноль, а затем возврат нуля, если он есть, несколько избыточен.