ios - 使用 react-native-navigation 将 React Native 应用程序与现有的 iOS 应用程序集成

标签 ios swift react-native react-native-navigation wix-react-native-navigation

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

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

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

上面的代码以我希望的方式打开 native react ,但它会因以下错误而崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'A bridge instance is required to create an RCTRootView'

我的 react-native-navigation 版本是:“^1.1.457”

最佳答案

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

也就是说,如果您已经有一个原生应用程序并且想要集成一个 React 原生 View ,那么您实际上并不需要 RNN。是的,RNN 提供了一些非常酷和方便的功能,但您可以完全控制您的 native 屏幕( View Controller ),因此您可以根据需要自行自定义它们。

参见 this guide有关如何将 React Native 与现有应用集成的更多信息。我不确定你为什么会收到这个错误,因为它基本上是你应该实现它的方式,也许由于某种原因它无法创建桥接对象。您可以简化它并通过 initWithBundleURL 创建一个没有桥的 RCTRootView(在这种情况下,RN 在内部创建桥),但是如果您计划有多个 RN 屏幕和/或 View 之间也相互通信 - 您将需要有一个所有 Root View 共享的桥接实例;这实际上也是 RNN 所做的。

关于ios - 使用 react-native-navigation 将 React Native 应用程序与现有的 iOS 应用程序集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51007963/

相关文章:

ios - 尝试将变量从一个类移动到另一个类

Swift:如何从解析中获取今天创建的对象?

firebase firestore 在事务中添加新文档 - transaction.add 不是函数

android - AsyncStorage 的替代品

javascript - React Native 中图像顶部的叠加按钮

ios - Swift 3 或 4 保存到自定义相册会创建重复图像

iphone - 如果您正在为越狱的 iPhone 进行编译,您应该针对哪个内核?特别是 iPhone 4s

ios - 如何在 Swift 中实现全局化?

ios - 如何打开 Instagram 查询方案以分享到故事?

uitableview - 使用自定义 UITableViewCell 时检测 UIButton