我的自定义本机模块不存在于 NativeModules 对象中

问题描述

因此,我想创建一个本机模块,用于检测应用程序是在模拟器/模拟器还是实际设备上运行。

在 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 文档来实现本机模块。

但我一直面临这个错误,它说 “TypeError null 不是对象,正在评估 GetDetails.xyzFunctn”

我浏览了多个解决方案和文章,但似乎没有任何效果

需要帮助的人!

解决方法

来自文档

如果不指定名称,JavaScript 模块名称将与 Objective-C 类名称匹配,并删除任何“RCT”或“RK”前缀。

所以不要指定任何名称,

@implementation AbcModule

// To export a module named AbcModule
RCT_EXPORT_MODULE();

@end

在你的情况下,它应该可以从 JS 中访问 AbcModule

但是文档并不清楚是否需要使用前缀“RCT”或“RK”来编写Objective-C类声明..但是因为这两个前缀似乎都是有效的,您应该可以只使用{{1 }} 没有前缀。

换句话说,如果你想在 JS 中使用 AbcModule,你需要相应地命名你的接口和实现

GetDetails