如何在React Native中将事件从iOS发送到javascript
我在iOS应用程序中做一些异步的事情。它是由javascript触发的。完成后(在应用程序中的某个地方),我想让javascript知道。 我当前的解决方案是从如何在React Native中将事件从iOS发送到javascript,javascript,ios,objective-c,react-native,Javascript,Ios,Objective C,React Native,我在iOS应用程序中做一些异步的事情。它是由javascript触发的。完成后(在应用程序中的某个地方),我想让javascript知道。 我当前的解决方案是从rcteventelmitter继承的本机模块,它具有以下方法: @interface MyEventEmitter : RCTEventEmitter // ... end @implementation - (void)giveSomethingToJS:(NSString *)something { [self sendEven
rcteventelmitter
继承的本机模块,它具有以下方法:
@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
为零,应用程序因为断言bridge!=无
。那么,我应该如何获得桥接器并让*发射器
(实例)知道。或者,我如何在初始化了桥的情况下获得正确的实例
提前谢谢 我有一个快速解决方案,不是一个很好的主意,但实现了我想要的 问题是我无法获取
myEventMitter
的实例,因此我使用本机代码中的通知中心来通知该实例
[[NSNotificationCenter defaultCenter] addObserverForName:@"NATIVE_WEIXIN_LOGIN_RESP_CODE"
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull notification) {
SendAuthResp *resp = notification.object;
[self sendEventWithName:@"WEIXIN_LOGIN_RESP_CODE" body:resp.code];
}];
您仍然可以发布React-Native中的正确方法来完成我想要的任务吗?问题是,在React-Native iOS SDK中,
rcteventMitter
子类不应该由您初始化。React Native SDK实际上处理RCTEventMitters的初始化
正如Arthur所指出的,使用
NSNotificationCenter
与您的RCTEventMitter
进行沟通是一个很好的策略。如果需要指向这些事件发射器的指针,还可以创建自定义单例类,并在初始化时向其注册RCTEventEmitter 这是我在这个问题上找到的最有帮助的答案,并清楚地解释了原因。在这里可以找到一个实现:非常感谢!