You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS新手技术求助:从原生ViewController向React Native发送事件时遭遇Bridge未设置错误

解决RCTEventEmitter "Bridge is not set" 错误的方案

嘿,我来帮你搞定这个问题!你遇到的核心问题很明确:你在Connect ViewController里手动创建了Brygga的新实例let event: brygga = Brygga(),但这个实例并没有被React Native框架初始化,所以它的bridge属性是nil,自然会抛出那个错误。

RCTEventEmitter的实例是由RN框架负责管理和初始化的,框架会在初始化时自动给它绑定bridge,我们不能自己new一个来用。下面是具体的修复步骤:

1. 给Brygga类添加单例属性

修改你的Brygga类,添加一个静态单例属性,这样我们就能拿到RN框架已经初始化好的那个实例:

@objc(Brygga)
class Brygga: RCTEventEmitter {
    // 静态单例,保存框架初始化的实例
    static var shared: Brygga?
    
    override init() {
        super.init()
        // 在初始化时把自己赋值给单例
        Brygga.shared = self
    }
    
    @objc func Finished(data: String) {
        sendEvent(withName: "onFinished", body: ["data": data])
    }
    
    override func supportedEvents() -> [String]! {
        return ["onFinished"]
    }
    
    override static func requiresMainQueueSetup() -> Bool {
        return true
    }
}

2. 修改Connect类中的事件发送逻辑

在Connect的didFinishWithResults方法里,不要创建新的Brygga实例,而是调用我们刚才设置的单例:

func didFinishWithResults(resultsDictionary: [String : Any]) {
    // 使用单例调用方法,而不是手动初始化
    Brygga.shared?.Finished(data: "Hello")
}

3. 修正Objective-C桥接文件的方法签名

你的Brygga.m里的RCT_EXTERN_METHOD没有匹配Swift方法的参数,需要修正:

@interface RCT_EXTERN_MODULE(Brygga, RCTEventEmitter)
// 加上参数类型,和Swift方法对应
RCT_EXTERN_METHOD(Finished:(NSString *)data)
@end

4. React Native端监听事件(补充)

最后别忘了在RN代码里监听这个事件,确保能收到原生发来的数据:

import { NativeEventEmitter, NativeModules } from 'react-native';

const { Brygga } = NativeModules;
const bryggaEmitter = new NativeEventEmitter(Brygga);

// 订阅事件
const eventSubscription = bryggaEmitter.addListener(
  'onFinished',
  (event) => {
    console.log('收到原生数据:', event.data);
    // 这里处理你的业务逻辑
  }
);

// 组件卸载时一定要取消订阅,避免内存泄漏
// useEffect(() => {
//   return () => {
//     eventSubscription.remove();
//   };
// }, []);

为什么这个方案有效?

当RN启动时,会自动初始化所有注册的Native模块(包括你的Brygga),这时候框架会给它设置好bridge属性。我们通过单例保存这个初始化好的实例,就能在ViewController里安全地调用它的方法发送事件,而不会出现bridge未设置的问题。

内容的提问来源于stack exchange,提问作者Crystalii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:12:33