无法通过单例访问数组

时间:2013-03-06 08:24:15

标签: cocos2d-iphone singleton

我需要将一个数组从InGameLayer传递到AppDelegate,所以这就是我所做的

InGameLayer.h中的

@interface InGameLayer : CCLayer
@property (nonatomic, strong) CCArray *heroArray;
+(InGameLayer *)sharedInGameLayer;
InGameLayer.m中的

static InGameLayer* sharedInGameLayer;
+(InGameLayer*)sharedInGameLayer
{
    if (sharedInGameLayer == nil)
    {
        sharedInGameLayer = [[self alloc] init];
    }
    return sharedInGameLayer;
}

//add Object if the button is tapped
- (void)PlayerButton1Tapped:(id)sender
{
    CCSprite *hero =[CCSprite spriteWithFile:@"hero.png"];
    [_heroArray addObject:hero];
}
AppDelegate.m中的

-(void) applicationDidEnterBackground:(UIApplication*)application
{
    CCArray *heroArray = [InGameLayer sharedInGameLayer].heroArray;
    CCLOG(@"array = %d", heroArray.count);
}

问题是array = 0,无论我添加到heroArray的对象有多少。 请帮我解决这个问题。提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您永远不会创建阵列。您的属性声明自动合成实例变量CCArray *_heroArray并为其访问方法。所有实例变量都在对象创建时使用零进行初始化,并且由于您从未在实例变量中存储指向实际CCArray对象的指针,因此它保持nil

在班级的init方法中,您应该

_heroArray = [[CCArray alloc] init];