2017-01-10 9 views
0

現在、React Nativeプロジェクトに参加しています。現在、ネイティブで通知されたイベントを送信し、ReactNative側に情報を送信しようとしています。Objective-CからRCTBridgeModuleインスタンスを取得するには

私は自分のモジュールを作った: インタフェース:

#import <Foundation/Foundation.h> 
#import "RCTBridgeModule.h" 
#import "RCTBridgeDelegate.h" 

@interface PushModule : NSObject <RCTBridgeModule> 

-(void) sendNotificationInfo: (NSDictionary*)info; 

@end 

実装:

#import "PushModule.h" 
#import "RCTBridge.h" 
#import "RCTEventDispatcher.h" 

@implementation PushModule 

RCT_EXPORT_MODULE() 

@synthesize bridge = _bridge; 

-(void) sendNotificationInfo:(NSDictionary *)info { 
    [bridge.eventDispatcher sendDeviceEventWithName:@"notification" body:info]; 
} 

@end 

そして、私はこれにアクセスし、自分のメソッドを呼び出すしたいと思います:

PushModule* pushModule = [PushModule new]; 
[pushModule sendNotificationInfo:@{@"title": @"My Title"}]; 

しようとしますこれは、橋が無限であることが判明し、私はReactで何も受け取りませんでした。私はAndroidから自分の情報を受け取ったので、ReactNativeの部分はOKです。 私が見た他のすべての情報源から得たものは、自分のモジュールをインスタンス化してはいけませんが、システムがこれを処理させるように思われます。したがって、問題は正しいことですか、そうであれば、そのインスタンスにどのようにアクセスしますか?

答えて

0

私は最終的には、それを自分で解決; P

私はrootViewからもらった橋で、私のモジュールを初期化してなかった何を。

@property (nonatomic, strong) RCTBridge* bridge; 

そしてimplmentationに:

私はインターフェイスに自分のbirdgeのpropetyを作った: だからAppDelegate内の私は、橋を抽出

@synthesize bridge; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    NSURL* jsLocation = [[RCTBundleURLProvider sharedSettings]jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 
    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsLocation moduleName:@"Metro"initialProperties:nil launchOptions:launchOptions]; 

    self.bridge = rootView.bridge; 

    ... 
} 

そして、私が情報を送信したいとき反応する側に私はブリッジを期待するイニシャライザでブリッジを渡します。

PushModule* pushModule = [[PushModule alloc] initWithBridge: self.bridge]; 
....getting my info.... 
[pushModule sendNotificationInfo:notificationInfo]; 

だから、私はrootView橋自体を持っていたことを実現する/知らないで、自分自身のために困難にそれを作っていたが判明しました。 幸せな日、素敵なコーディング。私は誰かが私の闘いから恩恵を受けることを願っています。

関連する問題