React Native 错误 No visible @interface for 'MyModule' declares the selector 'sendEventWithName:body:'

React Native 2020-03-27 阅读 221 评论 0

问题描述

在 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:'

解决方法

sendEventWithNameRCTEventEmitter 类的方法,MyModule.h 需要继承RCTEventEmitter ,而不是 NSObject

// MyModule.h
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface MyModule : RCTEventEmitter <RCTBridgeModule>

@end
最后更新 2020-03-27