0

私はobjective-c/iosを初めて使用し、別のインスタンスからvar/instanceにアクセスする方法について少し混乱しています。とにかく物事をもっと混乱させるかもしれないSparrow-frame作品も使っています。

状況は、Gameというクラスのインスタンスがあるということです。ゲーム内には、scrollContainerという変数があります。これは、それ自体がクラスタイプSPSpriteのインスタンスへのポインターです。

明らかにゲーム内でscrollContainerを問題なく使用できますが、別のインスタンス(Marketと呼ばれる)からscrollContainerにアクセスする必要があり、それがわかりません。

私はGame.m内でscrollContainerを宣言していました(私の用語はおそらくすべて間違っています)ので、私がする必要があるのは、実際にGame.hで@property、次に@synthasizeを使用して宣言(定義?)することだと思いました。 Market.mにGame.hを含めると、Market.m内からscrollContainer変数にアクセスできますが、Market.m(宣言されていない識別子)でエラーが発生するため、機能しません。

だから私の次の考えはこれらが私の選択肢です...

最初に呼び出されたときにscrollContainerポインターをMarket.minit関数に渡して保存しますか?

外出先でもシングルトンを持っているので、scrollContainerを保存するか、Game.mへのポインターをシングルトンに格納して、そこからMarket.mからscrollContainerにアクセスしようとしますか?

行くための最良/最も簡単な方法はどれですか?

アドバイスありがとうございます!

アップデート

リクエストされたコードスニペットは次のとおりです。

@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];

}

しかし、Market.mで使用できるようにするには、Market.mでもscrollContainerを@synthesizeする必要があると思いました。

4

1 に答える 1

1

あなたのコードでは、あなたは次のように書いています:

scrollContainer.visible = YES;//gives error

どのようにscrollContainer初期化または割り当てられますか?

あなたが言及した:

最初に呼び出されたときにscrollContainerポインターをMarket.minit関数に渡して保存しますか?

はい、これは実行可能なアプローチです。

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

//Then in Market.m
-(id)initWithScrollContainer:(SPSprite*)scrollContainer{
    //Do your initialization
}
于 2012-10-28T20:08:53.540 に答える