0

Objective-Cでは、静的c関数のスコープ内からインスタンス変数とメソッドにアクセスできますか?私が見落としているのはおそらくこれに対する簡単な答えがあるように感じますが、私はまだこの言語にかなり慣れていません。

次の簡略化されたコードを検討してください。

@implementation MyObject

static int ammoHitSensor(cpArbiter *arb, cpSpace *space, void *unused)
{
    // Call an instance method - doesn't work, self is undefined!
    [self doSomethingElse];
}

-(id)init
{
    // Code to create graphics, etc, hidden for clarity 
    // Adding a collision handler in the Chipmunk physics library
    cpSpaceAddCollisionHandler(space, COL_TYPE_AMMO, COL_TYPE_SENSOR, ammoHitSensor, NULL, NULL, NULL, NULL);
}

-(void)doSomethingElse
{
    // Stuff happens
}

@end

したがって、のスコープに入るとammoHitSensor、のスコープに戻る方法があることを期待していますMyObject。これまでのところ、私は運がありませんでした。

4

2 に答える 2

2

selfそのC関数を呼び出すときに渡す必要があります。C関数は、オブジェクト内に存在しないself_cmd、オブジェクト内に存在しないため(コード内のどこに配置したかに関係なく)。

于 2010-10-13T15:25:49.963 に答える
1

これを試して:

static int ammoHitSensor(cpArbiter *arb, cpSpace *space, void *obj)
{
    [(MyObject*)obj doSomethingElse];
}

-(id)init
{
    cpSpaceAddCollisionHandler(space, COL_TYPE_AMMO, COL_TYPE_SENSOR, ammoHitSensor, NULL, NULL, NULL, self);
}
于 2010-10-13T15:52:35.290 に答える