使用react native解决iOS Native模块加载问题

时间:2018-04-27 15:33:05

标签: ios react-native djinni react-native-native-module

我试图理解其代码由djinni生成的iOS native module

根据React Native doc,您必须在代码中包含RCT_EXPORT_MODULE()宏。这个工作样本没有。

后来在文档中说,异常是Swift,其中没有像这样的宏。

除非我错了,否则情况并非如此。

我试图在我自己的项目中复制使用djinni生成的代码,但是当我运行它时,它失败了,因为React Native无法加载我的本机模块:

  

undefined不是一个对象(评估' HelloWorld.getHelloWorld')

我想知道我是否可以单步执行NativeModule请求代码:

var HelloWorld = NativeModules.HelloWorld;

了解发生了什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的神秘解决了。

秘密位于AppDelegate实施中:

  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:moduleInitialiser launchOptions:nil];

  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"ExampleProject"
                                            initialProperties:nil];

通过调用

初始化RCTRootView指针
  

initWithBridge

当然你必须先分配RCTBridge对象。

that use case中不需要RCT_Export_Module宏,您只需提供模块名称:

+ (NSString *)moduleName
{
   return @"HelloWorld";
}

宏会自动为您执行此操作。

我还在使用:

  

initWithBundleURL

在我自己的项目中,从基本的create-react-app应用程序复制。

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                 moduleName:@"ExampleProject"
                                          initialProperties:nil
                                              launchOptions:launchOptions];

编辑1 :好的我可能还有其他问题。它不适用于javascript重载,因此只有第一次运行应用程序。启用远程JS调试时,它根本不起作用。奇怪...