我正在 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,应用程序因断言 bridge != nil
而崩溃。那么我应该如何获得桥接器并让 *emitter
(实例)知道。或者我怎样才能得到正确的桥初始化实例?
提前致谢!
最佳答案
问题在于,在 React-Native iOS SDK 中,RCTEventEmitter
子类不应由您初始化。 React-Native SDK 实际上会处理 RCTEventEmitter 的初始化。
正如 Arthur 指出的那样,使用 NSNotificationCenter
与您的 RCTEventEmitter
进行通信是一个很好的策略。如果您需要指向这些事件发射器的指针,您还可以创建自定义单例类并在初始化时向其注册 RCTEventEmitter。
关于javascript - 如何在 React Native 中将事件从 iOS 发送到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470897/