【发布时间】:2021-10-13 04:22:28
【问题描述】:
在 iOS 编程方面,我是一个完全的初学者。我有一个 React Native 应用程序,并且我已经建立了一个到 Swift 模块的本地桥。我想要实现的是能够从 React Native 启动原生 ViewController 页面,然后关闭 ViewController 并将包含数据的事件发送回 React Native。
我在以下文件中进行了编辑:
Brygga.m (My ObjC bridge between React-Native and Swift)
Bridge-Test-Bridging-Header.h (Bridging-Header file)
ConnectingFile.swift (My Swift classes and methods)
我有以下文件:
根据我阅读的教程,要将事件从本地发送到 React-Native,我们必须使用 RCTEventEmitter。但是我无法从 RCTEventEmitter 子类启动 ViewController,所以我做了两个类。
一个是UIViewController的子类,一个是RCTEventEmitter的子类。我已经成功启动了我的 ViewController,但是当尝试通过我的 RCTEventEmitter 类将事件数据从 ViewController 发送回 React Native 时;我得到了错误
“桥未设置。这可能是因为您已明确 在 Brygga 合成了这座桥,尽管它是从 RCTEventEmitter。”
ConnectingFile.swift
import Foundation
@objc(Connect)
class Connect: UIViewController, MiSnapWorkflowViewControllerDelegate{
func didFinishWithResults(resultsDictionary: [String : Any]) {
let event: brygga = Brygga()
brygga.Finished(data: "Hello")
}
@objc func startViewController() {
DispatchQueue.main.async {
let vc = MiSnapWorkflowViewController.init(with: [.passport, .selfie])
vc.delegate = self
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .fullScreen
let topViewController = UIApplication.shared.keyWindow?.rootViewController
topViewController?.present(navigationController, animated: true, completion: nil)
}
}
}
@objc(Brygga)
class Brygga: RCTEventEmitter {
@objc
func Finished(data: String) {
sendEvent(withName: "onFinished", body: ["data": data])
}
override func supportedEvents() -> [String]! {
return ["onFinished"]
}
override static func requiresMainQueueSetup() -> Bool {
return true
}
}
Brygga.m
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTViewManager.h>
@interface RCT_EXTERN_MODULE(Brygga, RCTEventEmitter)
RCT_EXTERN_METHOD(Finished)
@end
@interface RCT_EXTERN_MODULE(Connect, RCTViewManager)
RCT_EXTERN_METHOD(goToNative)
@end
BridgeTest-Bridging-Header.h
#import <React/RCTBridgeModule.h>
#import <React/RCTBridge.h>
#import <React/RCTEventDispatcher.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTRootView.h>
#import <React/RCTUtils.h>
#import <React/RCTConvert.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTViewManager.h>
我认为这可能与我如何从 ViewController 启动 RCTEventEmitter 类有关。这家伙有一个类似的问题,但我无法理解解决方案
Implement RCTEventEmitter in Swift but receive exception for bridge is not set
【问题讨论】:
标签: ios swift objective-c react-native