2013-03-06 6 views
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, независимо от того, сколько Object I добавлено в heroArray. Пожалуйста, дайте мне руку на эту проблему. Заранее благодарю за ваше время.

ответ

0

Вы никогда не создавали свой массив. В объявлении вашего свойства автосинтезируется переменная экземпляра CCArray *_heroArray и методы доступа к ней. Все переменные экземпляра инициализируются нулями при создании объекта, и поскольку вы никогда не храните указатель на фактический объект CCArray в переменной экземпляра, он остается nil.

В init методе вашего класса вы должны сделать

_heroArray = [[CCArray alloc] init]; 
+0

Привет, да я инициализировать мой массив, как это в моем методе инициализации. Проблема в том, что я не добавлял свой объект внутри метода init. Я хочу, чтобы пользователь добавил объект, нажав кнопку. И объект никогда не переходит к AppDelegate (массив равен нулю в AppDelegate). Можете ли вы предложить способ сделать это? Спасибо за ваш ответ – user1817517

Смежные вопросы