问题描述
因此,我想创建一个本机模块,用于检测应用程序是在模拟器/模拟器还是实际设备上运行。
在 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