首页 文章

使用react-native-navigation与现有iOS应用程序集成反应本机应用程序

提问于
浏览
1

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

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

问题是,通过调用这行代码,应用程序打开了启动屏幕,而我需要通过按原生应用程序中的按钮打开react本机应用程序并将其作为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”

1 回答

  • 0

    目前,RNN专为“首先做出反应”的应用程序而设计,或称为绿地RN应用程序; bootstrapping API(在v1和v2中)显示了启动画面,但即使你可以解决它 - 这也行不通 . 有计划在本机方面公开RNN API,因此像您这样的应用程序将能够利用其所有功能 . 我不知道什么时候可以使用,但它在v2的路线图中 .

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

    有关如何将native native与现有应用程序集成的详细信息,请参阅this guide . 我收到此错误是因为它应该实现它,可能由于某种原因无法创建桥对象 . 你可以简化它并通过 initWithBundleURL 创建一个没有桥梁的 RCTRootView (在这种情况下,RN在内部创建桥梁),但是如果你计划有几个RN屏幕和/或视图也可以相互通信 - 你需要有所有根视图共享的单个桥实例;这实际上是RNN的作用 .

相关问题