【问题标题】:Subclassed CCSpriteBatchNode object is nil子类 CCSpriteBatchNode 对象为 nil
【发布时间】:2013-11-16 11:33:03
【问题描述】:

我将 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

【问题讨论】:

    标签: cocos2d-iphone null nscoding ccspritebatchnode


    【解决方案1】:

    如果您不使用 ARC,我在这里看到两个问题:

    • batchImageName 字符串未保留
    • batchNodeWithFile: 没有向返回的实例发送自动释放

    除了你使用了不寻常的初始化风格,常见的风格是这样的:

    if (self)
    {
        batchImageName = fileImage;
    }
    return self;
    

    检查 self 是否为 nil,如果是则返回 nil,有点多余。

    【讨论】:

    • 我正在使用 ARC,我将初始化样式更改为上面的样式,但我仍然在日志中得到相同的内容 - batchImageName = (NSString*) nil
    • 您在何时何地登录?编码时或解码后是否为零?在后一种情况下,发布启动解码的代码。
    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多