我的自定义本机模块不在 NativeModules 对象中
Posted
技术标签:
【中文标题】我的自定义本机模块不在 NativeModules 对象中【英文标题】:My custom native module is not present inside NativeModules object 【发布时间】:2021-07-10 15:03:43 【问题描述】:所以,我想创建一个本机模块,它可以检测应用程序是在模拟器/模拟器还是实际设备上运行。
在 android 上一切正常,但我在 ios 上遇到问题。
我已经创建了一个 AbcModule.h 和一个 AbcModule.m 文件
#import <React/RCTBridgeModule.h>
@interface AbcModule : NSObject <RCTBridgeModule>
@end
这是 AbcModule.h
#import "AbcModule.h"
@implementation AbcModule
RCT_EXPORT_MODULE(GetDetails);
- (BOOL) xyzFunctn
#if TARGET_IPHONE_SIMULATOR
return YES;
#else
return NO;
#endif
RCT_EXPORT_METHOD(xyzFunctn: (RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
resolve self.xyzFunctn;
@end
这是 AbcModule.m
这里我按照 react native 文档来实现 Native Modules。
但我一直面临这个错误,上面写着 “TypeError null 不是对象,正在评估 GetDetails.xyzFunctn”
我浏览了几篇解决方案和文章,但似乎没有任何效果。
需要帮助的人!
【问题讨论】:
【参考方案1】:来自文档
如果您不指定名称,则 javascript 模块名称将与 Objective-C 类名称匹配,并删除所有“RCT”或“RK”前缀。
所以不要指定任何名称,
@implementation AbcModule
// To export a module named AbcModule
RCT_EXPORT_MODULE();
@end
在你的情况下,它应该可以从 JS 中访问
AbcModule
但是文档并不清楚是否需要使用前缀“RCT”或“RK”来编写 Objective-C 类声明。但是因为这两个前缀似乎都是有效的,你应该可以只使用 AbcModule
没有前缀。
换句话说,如果你想在 JS 中使用GetDetails
,你需要相应地命名你的接口和实现
@implementation RCTGetDetails
RCT_EXPORT_MODULE(GetDetails);
// or
// RCT_EXPORT_MODULE();
@end
【讨论】:
【参考方案2】:好的,如果有人遇到这个问题并且觉得他们的代码应该可以工作,但事实并非如此,并且任何在线解决方案也不适合您。
试试这个: 当您为 header 和 Objective-c 或 swift 文件创建 .h 和 .m 文件时,请确保您在 Xcode 中而不是在 VSCode 中进行。
VSCode 最终不会将 .h 文件添加到所需的资源文件夹中,我已经浪费了 2 周的时间来寻找解决方案,但最后,就是这样,是的,就是这样。
【讨论】:
以上是关于我的自定义本机模块不在 NativeModules 对象中的主要内容,如果未能解决你的问题,请参考以下文章