Устранение неполадок при загрузке собственного модуля iOS с помощью реакции native
Я пытаюсь разобраться в родном модуле iOS, код которого сгенерирован Джинни.
Согласно документу React Native, вы должны включить RCT_EXPORT_MODULE()
макрос в вашем коде. Этот рабочий образец не делает.
Позже в документации говорится, что исключением является Swift, где такого макроса нет.
Если я не ошибаюсь, это не так.
Я пытаюсь воспроизвести использование кода, сгенерированного djinni, в моем собственном проекте, но когда я его запускаю, он не работает, потому что React Native не может загрузить мой собственный модуль:
undefined не является объектом (оценка HelloWorld.getHelloWorld)
Мне интересно, смогу ли я пройти через код запроса NativeModule:
var HelloWorld = NativeModules.HelloWorld;
Чтобы понять, что происходит.
Спасибо за вашу помощь.
1 ответ
Все правильно, загадка раскрыта.
Секрет находится в реализации AppDelegate:
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:moduleInitialiser launchOptions:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"ExampleProject"
initialProperties:nil];
Указатель RCTRootView инициализируется вызовом
initWithBridge
Конечно, вы должны предварительно выделить объект RCTBridge.
RCT_Export_Module
макрос не требуется в этом случае, вы просто должны указать имя модуля:
+ (NSString *)moduleName
{
return @"HelloWorld";
}
Макрос делает это для вас автоматически.
Я все еще использовал:
initWithBundleURL
В моем собственном проекте дублируется из базового приложения create-Reaction-app.
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"ExampleProject"
initialProperties:nil
launchOptions:launchOptions];
РЕДАКТИРОВАТЬ 1: Хорошо, у меня может быть другая проблема. Он не работает при перезагрузке JavaScript, поэтому приложение запускается только в первый раз. Это также не работает вообще, когда удаленная отладка JS включена. Странный...