React Native 错误 No visible @interface for 'MyModule' declares the selector 'sendEventWithName:body:'
问题描述
在 iOS 项目使用 Objective C 自定义一个 native 原生模块,使用 sendEventWithName
发送一个事件到 Javascript 模块。
// MyModule.h
#import <React/RCTBridgeModule.h>
@interface MyModule : NSObject <RCTBridgeModule>
@end
// MyModule.m
#import "MyModule.h"
@implementation MyModule
RCT_EXPORT_MODULE();
- (NSArray<NSString *> *)supportedEvents
{
return @[@"EventReminder"];
}
- (void)calendarEventReminderReceived:(NSNotification *)notification
{
NSString *eventName = notification.userInfo[@"name"];
[self sendEventWithName:@"EventReminder" body:@{@"name": eventName}];
}
@end
Xcode报了一个错误。
No visible @interface for 'MyModule' declares the selector 'sendEventWithName:body:'
解决方法
sendEventWithName
是 RCTEventEmitter
类的方法,MyModule.h 需要继承RCTEventEmitter
,而不是 NSObject
。
// MyModule.h
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface MyModule : RCTEventEmitter <RCTBridgeModule>
@end