我正在iOS应用程序中执行异步操作。它是由javascript触发的。完成后(在应用程序中某处分开),我想让javascript知道。
我当前的解决方案是从RCTEventEmitter继承的本机模块,该模块具有以下方法:

@interface MyEventEmitter : RCTEventEmitter
// ...
end
@implementation
- (void)giveSomethingToJS:(NSString *)something {
  [self sendEventWithName:@"SOME_NAME" body:something];
}
@end

然后,当我的异步作业完成后,我调用此方法:
MyEventEmitter *emitter = [[MyEventEmitter alloc] init];
[emitter giveSomethingToJS:@{}];

显然,emitter.bridge为nil,并且由于assert bridge != nil导致应用程序崩溃。因此,我应该如何获取网桥并让*emitter(实例)知道。或如何通过网桥初始化获得正确的实例?

提前致谢!

最佳答案

问题是在React-Native iOS SDK中,您不应该初始化RCTEventEmitter子类。 React-Native SDK实际上会处理您的RCTEventEmitters的初始化。

正如Arthur所指出的那样,使用NSNotificationCenterRCTEventEmitter进行通信是一个不错的策略。如果需要指向这些事件发射器的指针,则还可以创建自定义单例类并在初始化时向其注册RCTEventEmitter。

10-02 03:25