2017-09-08 12 views
0

私はReact Nativeを使って、NSDictionaryの関数を受け入れることができるネイティブモジュールを作成しようとしています。たとえば、複数の潜在的なコールバックを持つ関数を呼び出すとします。 0コールバック、15、またはその間の任意の数を持つことができるとします。私は、私が使用するコールバック関数を含むように、私は辞書を使用します。ReactネイティブNativeModulesは1つのオブジェクト内で複数の関数を渡す

MyModule.showInterstitial({ 
    onLoad:()=>{console.log("Loaded")}, 
    failedToLoad:()=>{console.log("Failed to load")}, 
    onDismiss:()=>{console.log("Did dismiss")}, 
}) 

これは、このようなコードを見て持っているAPIを使用して誰かではなくて、次のようなものから来る多くの意味があります15種類のコールバックのみ3が使用されている:

MyModule.showInterstitial(null, 
    null, 
    null, 
    null, 
    ()=>{console.log("Loaded")}, 
    null, 
    null, 
    ()=>{console.log("Failed to load")}, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    ()=>{console.log("Did dismiss")}, 
    null 
}) 

私はObjective Cのコードを見ると、私はこのような方法で作成しようとすることができます。

RCT_EXPORT_METHOD(showInterstitial: (NSDictionary *)callbacks) { 
    // implementation 
} 

しかし、これで問題が発生しObjCメソッドは、NSDictionaryがNSDictionariesのNSDictionaryを作成することです(言い換えれば、RCTConvertには、javascript関数をRCTResponseSenderBlockに変換するメソッドがありません)。私はキャストしようとしましたが、うまくいきません。私はそれを呼び出すだけで、私のアプリケーションがクラッシュします。

だから私は誰もこれを前に扱っているのか、それをどう対処するのか知っているのだろうか?

答えて

0

このような使用例については、JavaScriptでイベントAPIを使用し、ブリッジモジュールをRCTEventEmitterに拡張することを検討する必要があります。ブリッジインフラストラクチャは、機能ではなくデータの入出力用に設計されています。ブリッジモジュールが起動し、JSが必要に応じて購読することができるloaddismissのイベントを持つことができます。 showInterstitialメソッドは、リターンコールバックを使用して同期エラー/成功を返すことができます。

ブリッジモジュールを拡張してRCTEventEmitterに変更し、ロードを起動してイベントを終了する必要がある場合は[self sendEventWithName:body:]を使用してください。

希望します。

関連する問題