2016-07-20 15 views
2

iOSアプリケーションで何か非同期処理をしています。それはjavascriptによって引き起こされます。それが完了したら(アプリ内で別の場所に分かれている)、私はJavaScriptに知らせたい。 私の現在のソリューションは、次のような方法があるRCTEventEmitterから継承されたネイティブモジュール、次のとおりです。次にiOSからjavascriptへReact Nativeのイベントを送信する方法

@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(インスタンス)を知らせることになっています。または、ブリッジを初期化して正しいインスタンスを取得するにはどうすればよいですか?

ありがとうございます!

答えて

1

私は素早い修正をしていますが、非常に良いアイデアではありませんが、私が欲しいものを達成しました。

問題は私がMyEventEmitterのインスタンスを取得できないため、代わりにネイティブコードで通知センターを使用してインスタンスに通知します。

[[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]; 
               }]; 

リアクションネイティブで正しい方法を投稿してもらいたいのですか?

0

問題は、React-Native iOS SDKでRCTEventEmitterサブクラスを初期化しないことです。 React-Native SDKは実際にRCTEventEmittersの初期化を処理します。

アーサーが指摘しているように、NSNotificationCenterを使用してRCTEventEmitterと通信するのは良い戦略です。これらのイベントエミッタへのポインタが必要な場合は、カスタムシングルトンクラスを作成し、初期化時にRCTEventEmitterを初期化時に登録することもできます。

関連する問題