2010-10-13 81 views
0

在Objective-C中,是否可以從靜態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範圍。到目前爲止,我還沒有運氣。

回答

2

當您調用該C函數時,您需要傳遞self。 C函數沒有self_cmd,因爲它們不在對象內部(不管你把它們放在代碼中的什麼位置)。

+0

啊哈,那沒有的伎倆。謝謝! – 2010-10-13 15:52:24

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); 
}