[self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@{@"name": eventName}];
在我的应用代表中.当然要做到这一点我需要导入:
导入“RCTBridge.h”
导入“RCTEventDispatcher.h”
并合成桥梁
@synthesize bridge = _bridge;
但是在此之后的事件中,桥变量不存在.为了使这个错误消失,我使我的AppDelegate符合RCTBridgeModule协议,如下所示:
AppDelegate : UIResponder <UIApplicationDelegate,RCTBridgeModule>
然后在我的AppDelegate.m中,我做了:
RCT_EXPORT_MODULE()
毕竟我的桥终于没有错误,但每次我在AppDelegate中使用它,它都是零.
我哪里错了?
提前致谢.
iOS还会在应用程序启动时创建AppDelegate实例,但iOS创建的实例与RCTBridge创建的实例不同.
所以基本上,你有两个AppDelegate实例:你试图访问self.bridge的那个实例,它不是由RCTBridge创建的,所以没有对它的引用,而是由RCTBridge创建的实例,它有一个桥,但不是您的UIApplication的委托,并且没有运行您的代码.
你有几个选择:
1)当您使用RCTBridgeDelegate的extraModules方法创建AppDelegate实例时,可以将其传递到桥中.这允许您告诉桥使用模块的现有实例,而不是创建新模块.
2)您可以通过RCTRootView访问网桥,而不是将AppDelegate变为模块,以便为其提供self.bridge属性.
3)将需要与桥接通信的逻辑从AppDelegate移出到新模块中.如果需要由AppDelegate中的事件触发,请使用NSNotifications与模块实例进行通信(我们将此模式用于RCTPushNotificationManager).
在这些选项中,
选项1)可能是最复杂的正确做法.
选项2)可能是最容易做到的,因为你可能已经在AppDelegate中有一个RCTRootView实例,你可以参考.
选项3)从技术角度来看是理想的,因为它可以防止您在桥接器正确初始化之前意外发送事件(可能会崩溃或出现意外行为).