我正在编写一个有两个视图的iOS应用。每个视图都是一个RCTRootView,由不同的React Native组件创建。
我调查了这个问题(Multiple RCTRootView in a single App)所以现在我明白这是可能的。
但是有一个问题。让第一个RCTRootView实例为B,让第二个实例为B. A首先显示在屏幕上,其反应本机对应物使用NativeAppEventEmitter从我的本机应用程序接收事件。在这一点上,一切正常。 A还有一个按钮,用于在屏幕上显示B.
按下按钮时,将创建并显示B.再次按下该按钮时,B将从其超视图中移除并销毁。
但在此之后,NativeAppEventEmitter什么都不做。
欢迎任何类型的提示或评论。
答案 0 :(得分:1)
此问题与self.bridge为零的症状有关。虽然我做了@synthesize bridge = _bridge,但是当从javascript端处理事件时,bridge属性为nil,这是意料之外的。
通过检查和网上冲浪,我找到了原因:对于RCTBridgeModule,对象的生命周期很难通过objective-c代码来控制。关于桥接模块的最佳实践是忘记有关其生命周期的所有细节,并且不对其生命周期做出任何假设。
因此,如果您自己创建了桥模块(可能使用handleMessage
),则应用程序中可能会有两个不同的桥对象。您无法确定哪个对象是从javascript端接收事件的对象。
因此,我现在正在使用以下解决方案。
[MyBridge new]