0

我需要将一个数组从 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 添加了多少对象。请帮我解决这个问题。提前感谢您的宝贵时间。

4

1 回答 1

0

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

init你的班级方法中,你应该做

_heroArray = [[CCArray alloc] init];
于 2013-03-06T10:12:28.837 回答