2012-10-28 66 views
0

我是新來的objective-c/ios,對於如何從另一個實例訪問var/instance有點困惑。我也在使用麻雀框架,可能會讓事情更加混亂,但無論如何。初學者在obj-c訪問另一個實例時感到困惑

情況是,我有一個類的實例,稱爲遊戲。 內部遊戲我有一個名爲scrollContainer的var,它本身是一個指向類類型SPSprite的實例的指針。

我能夠在遊戲中明顯使用scrollContainer,但現在我需要從另一個實例(稱爲Market)訪問scrollContainer,這就是我不確定的地方。

我在Game.m中聲明瞭(我的術語可能都是錯的)scrollContainer,所以我想我需要做的是在Game.h中用@property實際聲明(define?)它,然後@synthasize然後如果我在Market.m中包含Game.h,那麼我將能夠從Market.m內部訪問scrollContainer var,但這不起作用,因爲它在Market.m中給我一個錯誤(未聲明的標識符)

所以我的下一個想法是這些是我的選擇...

將scrollContainer指針傳遞給Market.m初始化函數,當它第一次調用並存儲它?

我也有一個單身人士在旅途中,所以也許我存儲scrollContainer,或者在我的單身人士指向Game.m,他們嘗試從Market.m訪問scrollContainer?

哪一種是最好/最簡單的方法?

感謝您的任何建議!

UPDATE

這裏有要求的代碼段。

@interface Game : SPSprite 
{ 
    @private 
    float mGameWidth; 
    float mGameHeight; 
} 

- (id)initWithWidth:(float)width height:(float)height; 

@property (nonatomic, assign) float gameWidth; 
@property (nonatomic, assign) float gameHeight; 
@property SPSprite *scrollContainer; 

@end 

而且從Market.m

- (void)onCloseMarketButton:(SPEvent *)event 
{ 
    NSLog(@"Close Market Clicked!!"); 

    [self removeAllMarketButtons]; 

    [closeMarketButton removeFromParent]; 

    scrollContainer.visible = YES;//gives error 

    [self removeFromParent]; 

} 

我只是在想,雖然,我必須@synthesize scrollContainer在Market.m也能在Market.m使用它一下?

+0

實際上,它應該按照您嘗試的方式工作(在Game.h中聲明scrollContainer作爲屬性並在Market.m中導入Game.h)。你能否提供你的Game.h代碼和Market的一部分。你試圖訪問它嗎? – Tobi

+0

只是在底部添加了一些代碼和評論。 – Phil

回答

1

在代碼中,你寫道:

scrollContainer.visible = YES;//gives error 

如何scrollContainer初始化或分配的?

你提到:

傳遞scrollContainer指針Market.m初始化函數時 它的第一個打來電話,存儲呢?

是的,這是一個可行的方法。

//Some where in Game.m 
Market *market = [[Market alloc]initWithScrollContainer:self.scrollContainer]; 

//Then in Market.m 
-(id)initWithScrollContainer:(SPSprite*)scrollContainer{ 
    //Do your initialization 
} 
+0

它在game.m中的函數中被初始化爲 「scrollContainer = [[SPSprite alloc] init];」我想通過將它的聲明放入game.h中,然後將game.h導入market.m,我可以訪問它? – Phil

+0

是的,但不是由scrollContainer.visible。你需要使用Game的一個實例來調用它。例如,game.scrollContainer.visible。 – yeesterbunny