我试图理解其代码由djinni生成的iOS native module。
根据React Native doc,您必须在代码中包含RCT_EXPORT_MODULE()
宏。这个工作样本没有。
后来在文档中说,异常是Swift,其中没有像这样的宏。
除非我错了,否则情况并非如此。
我试图在我自己的项目中复制使用djinni生成的代码,但是当我运行它时,它失败了,因为React Native无法加载我的本机模块:
undefined不是一个对象(评估' HelloWorld.getHelloWorld')
我想知道我是否可以单步执行NativeModule请求代码:
var HelloWorld = NativeModules.HelloWorld;
了解发生了什么。
感谢您的帮助。
答案 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调试时,它根本不起作用。奇怪...