我有一个使用react-native-navigation的React Native项目。我已将该项目与现有的本机iOS应用程序迅速集成在一起。如wix的文档所述,这行代码将通过原生iOS应用:
let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource: nil)
RCCManager.sharedIntance().initBridge(withBundleURL: jsCodeLocation)
问题是,通过调用此代码行,应用程序将打开启动屏幕,而我需要通过按本机应用程序中的按钮并将其作为viewController推送来打开react本机应用程序,但调用此代码行将打开再次启动屏幕,而没有任何后退按钮可返回到本机iOS应用。另外,如果我删除了这一行代码,而是在下面的代码中使用了它,那么我将崩溃。 我还尝试使用此代码作为提到的react-native集成文档,但不适用于react-native-navigation:
let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource: nil)
let bridge = RCTBridge(bundleURL: jsCodeLocation, moduleProvider: nil, launchOptions: nil)
let rootView = RCTRootView(bridge: bridge, moduleName: "MyHotels", initialProperties: nil)
let rnViewController = UIViewController()
rnViewController.view = rootView
self.navigationController?.pushViewController(rnViewController, animated: true)
上面的代码以我希望的方式打开了本机反应,但是它将崩溃,并显示以下错误:
由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序, 原因:“创建RCTRootView需要桥实例”
我的react-native-navigation版本是:“ ^ 1.1.457”
答案 0 :(得分:0)
目前,RNN是为“首先响应本机”的应用程序设计的,即所谓的未开发RN应用程序;引导API(在v1和v2中均显示)显示了初始屏幕,但是即使您可以解决该问题,也无法使用。已经计划在本机端公开RNN API,以便像您这样的应用程序能够利用其所有功能。我无法确定何时可以使用它,但它在v2的路线图中。
也就是说,如果您已经拥有本机应用程序并想要集成react本机视图,则您实际上并不需要RNN。是的,RNN提供了一些非常酷和方便的功能,但是您可以完全控制本机屏幕(视图控制器),因此您可以根据需要自定义它们。
有关如何将react native与现有应用集成的更多信息,请参见this guide。我不确定为什么会收到此错误,因为它基本上就是您应该实现的方式,也许由于某种原因它无法创建桥对象。您可以简化它,并通过RCTRootView
创建一个没有桥的initWithBundleURL
(在这种情况下,RN内部创建桥),但是如果您打算拥有多个RN屏幕和/或视图,它们之间也可以进行通信另一个-您将需要有一个所有根视图都共享的桥实例;这实际上也是RNN的功能。