В настоящее время я заканчиваю свою игру для iOS, используя ue4. Я использую какой-то определенный код iOS и пытаюсь вызывать методы, используя переменную self
void Aaccessactorios::Shareoption() {
[self Sharebutton];//ios
}
код находится внутри тега препроцессора #if PLATFORM_IOS и #endif
Я думаю, что я объявил переменную self в начале моего файла cpp:
-(id)init
{
self = [super init];
return self;
}
Другие форумы Следует упомянуть, что движок Unreal собирает все cpp .mm в конце, так что я не думаю, что это проблема.
Переменная self используется вокруг цели c, поэтому она важна для моего кода. Как правильно смешать код и сделать так, чтобы моя переменная self объявлялась?
Спасибо
редактировать: это часть, которую я пытаюсь воссоздать https://answers.unrealengine.com/questions/422323/callback-from-objective-c-back-to-the-c-layer.html
Я постоянно смешиваю C ++ и Obj-C. Экземпляр класса Obj-C отличается от экземпляра C ++. Экземпляр класса C ++ имеет this
, Здесь нет self
, Экземпляр класса Obj-C имеет self
, Вы можете прочитать больше об этом здесь:
Разница в ч / б Объективность С и С ++ это?
Исходя из того, что вы написали, у вас есть класс C ++ Aaccessactorios
, Не ясно, кто определил Sharebutton
, Если он находится в классе C ++, то вы бы назвали его как
this->Sharebutton();
или просто
Sharebutton();
Если Sharebutton
принадлежит классу Obj-C, тогда вам нужно, чтобы C ++ либо имел указатель на экземпляр класса Obj-C, либо передавал его в функцию. Примером последнего будет:
void Aaccessactorios::Shareoption(ObjCClassObj *obj) {
[obj Sharebutton];//ios
}
В этой ссылке на код вы можете видеть, что они на самом деле делают первое.
class IOSMediaPlayerController
{
public:
IOSMediaPlayerController();
~IOSMediaPlayerController();
void startPlayback();
void stopPlayback();
void callbackFunc();
#if PLATFORM_IOS
IOSMediaPlayerControllerObj *playerObj;
#endif
};
Здесь вы можете увидеть, что playerObj
является ссылкой (указателем) на объект Obj-C. Это создано в конструкторе с этим
IOSMediaPlayerController::IOSMediaPlayerController()
{
#if PLATFORM_IOS
playerObj = [[IOSMediaPlayerControllerObj alloc] init];
#endif
}
И затем вызывается
void IOSMediaPlayerController::startPlayback()
{
#if PLATFORM_IOS
[playerObj startPlayback];
#endif
}
Обратите внимание, пример кода не вызывает self
, он вызывает созданный конструктором экземпляр playerObj
,
Других решений пока нет …