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