Устранение неполадок при загрузке собственного модуля 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 включена. Странный...

Другие вопросы по тегам