Я слежу за ответом Дэйва Мейтера (это было очень полезно!).
У меня были проблемы с установкой цели C ++ (изнутри класса target-C ++) и я использовал [NSValue valueWithPointer: theTargetCxxClass] для передачи цели в класс Proxy.mm.
Итак, внутри моего класса Objective-C ++ вместо того, чтобы делать это:
[proxy_ setTarget:this];
Я сделал это:
[proxy_ setTarget:[NSValue valueWithPointer:this]];
или
[proxy_ setTarget:[NSValue valueWithPointer:ptrToMyCxxObject]];
И это избавило от ошибки при передаче класса C ++ (который не расширяет тип «id») в прокси-класс Objective-C ++.
Внутри прокси-класса вам необходимо использовать метод pointerValue NSValue, а затем привести обратно к классу C ++, чтобы отправить ему сообщение.
-(void) myButtonAction: (id)sender {
((MyCxxClass*)[target pointerValue])->someMethodInMyCxxClass();
}
Меня впервые предупредили об уловке "valueWithPointer" в этом посте .