Подклассный объект 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;

Проверка себя на ноль, а затем возврат нуля, если он есть, несколько избыточен.

Другие вопросы по тегам