【问题标题】:React Native NativeModules Empty ObjectReact Native NativeModules 空对象
【发布时间】:2017-08-29 23:46:54
【问题描述】:
尝试创建我的第一个 npm 模块以确定用户是否在打电话。它适用于 React Native 应用程序。无论我尝试什么,模块都会返回未定义。 NativeModules 总是看起来是一个空对象。
请帮忙!下面是代码的链接。 export default RNOnPhoneCall; 中的 index.js 只会返回未定义的。如何链接ios文件夹中的函数,并将它们导出到index.js?注意,android 还不是最新的,只有ios。
Link to Github
【问题讨论】:
标签:
react-native
native-module
【解决方案1】:
尝试重建您的项目。我最近遇到了同样的问题,只是重建解决了它
【解决方案2】:
在窥探了一下之后,我发现 Obj-C 文件没有添加到 Xcode 中的编译源中。跟我来:
假设文件名是:NotchNative.h 和 NotchNative.m。如果NotchNative.m 文件未列出,Xcode 将不会编译这些文件,因此需要将其添加到 Compile Sources 中。
按照图片中的步骤重新构建/运行 iOS 应用。
这肯定是 Xcode 方面的错误,因为在 Swift 项目中不会发生这种情况。
【解决方案3】:
我没有在我的 iOS 文件中正确导出该方法。这是解决方案,以及最终项目的链接。
react-native-check-phone-call-status on github
#import "RNCheckPhoneCallStatus.h"
#import "React/RCTLog.h"
#import <AVFoundation/AVAudioSession.h>
#import<CoreTelephony/CTCallCenter.h>
#import<CoreTelephony/CTCall.h>
@implementation RNCheckPhoneCallStatus
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(get:(RCTResponseSenderBlock)callback)
{
NSString *phoneStatus = @"PHONE_OFF";
CTCallCenter *ctCallCenter = [[CTCallCenter alloc] init];
if (ctCallCenter.currentCalls != nil)
{
NSArray* currentCalls = [ctCallCenter.currentCalls allObjects];
for (CTCall *call in currentCalls)
{
if(call.callState == CTCallStateConnected)
{
phoneStatus = @"PHONE_ON";
}
}
}
callback(@[[NSNull null], phoneStatus]);
}
@end
【讨论】:
-
另外,如果您关注react tutorial,这有点误导。它将在打开调试模式的情况下工作。如果你想让它在没有调试模式的情况下工作,你需要这里提到的回调。