Доступ к экземплярам vars и методам из функции c - PullRequest
0 голосов
/ 13 октября 2010

В 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 Пока что мне не повезло.

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Вам нужно передать self, когда вы вызываете эту функцию C. Функции C не имеют self или _cmd, поскольку они не живут внутри объектов (независимо от того, где вы поместили их в свой код).

1 голос
/ 13 октября 2010

Попробуйте это:

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