1

我有一个使用 react-native-navigation 的 React Native 项目。我已经将该项目与 swift 中的现有原生 iOS 应用程序集成。正如 wix 的文档所说,这行代码将通过原生 iOS 应用程序显示反应原生应用程序:

let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource: nil)
RCCManager.sharedIntance().initBridge(withBundleURL: jsCodeLocation)

问题是,通过调用这行代码,应用程序打开了启动屏幕,而我需要通过按下本机应用程序中的按钮并将其作为 viewController 推送来打开反应本机应用程序,但调用这行代码会打开启动屏幕再次没有任何返回按钮返回本机 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”

4

1 回答 1

0

目前,RNN 是为“先反应原生”的应用程序设计的,或者您称之为未开发的 RN 应用程序;引导 API(在 v1 和 v2 中)显示启动屏幕,但即使您可以解决它 - 这也行不通。有计划在本机端公开 RNN API,以便像您这样的应用程序能够利用其所有功能。我不知道它何时可用,但它在 v2 的路线图中。

也就是说,如果你已经有一个原生应用并且想要集成一个 react 原生视图,那么你真的不需要 RNN。是的,RNN 提供了一些非常酷且方便的功能,但是您可以完全控制本机屏幕(视图控制器),因此您可以根据需要自行自定义它们。

有关如何将 react native 与现有应用程序集成的更多信息,请参阅本指南。我不确定您为什么会收到此错误,因为它基本上是您应该实现它的方式,也许由于某种原因它无法创建桥对象。您可以简化它并创建一个RCTRootView没有桥接的 via initWithBundleURL(在这种情况下,RN 在内部创建桥接),但是如果您计划有多个 RN 屏幕和/或视图也可以在彼此之间进行通信 - 您将需要一个所有根视图共享的桥接实例;这实际上也是 RNN 所做的。

于 2018-06-27T08:01:12.133 回答