Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在React Native中将事件从iOS发送到javascript_Javascript_Ios_Objective C_React Native - Fatal编程技术网

如何在React Native中将事件从iOS发送到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

我在iOS应用程序中做一些异步的事情。它是由javascript触发的。完成后(在应用程序中的某个地方),我想让javascript知道。 我当前的解决方案是从
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

这是我在这个问题上找到的最有帮助的答案,并清楚地解释了原因。在这里可以找到一个实现:非常感谢!