gpt4 book ai didi

objective-c - 在 Swift 中实现 RCTEventEmitter 但未设置桥接异常

转载 作者:行者123 更新时间:2023-12-04 01:03:51 26 4
gpt4 key购买 nike

我正在尝试在 Swift 中为 React Native 实现一个事件发射器,以便我可以在我的一些 native 模块中重用它。但是,当我从 iOS 本地发送事件时,我收到以下错误

Bridge is not set. This is probably because you've explicitly synthesized the bridge in MyEventEmitter, even though it's inherited from RCTEventEmitter.
/// MyEventEmitter.m
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface RCT_EXTERN_MODULE(MyEventEmitter, RCTEventEmitter)

RCT_EXTERN_METHOD(supportedEvents)

@end

在 Swift 中的实现:

import Foundation

@objc(MyEventEmitter)
class MyEventEmitter: RCTEventEmitter {

public static let shared = MyEventEmitter()

override func supportedEvents() -> [String]! {
return [
... // my event list
]
}
}

在我的原生 swift 代码中,我初始化了发射器

private let eventEmitter: MyEventEmitter = .shared

// send event
self.eventEmitter.sendEvent(withName: "someEvent", body: nil)

我也放了<React/RCTBridgeModule.h><React/RCTEventEmitter.h>在我的桥接头内。

我在这里做错了什么?

最佳答案

我发现的问题是你不能自己实例化 MyEventEmitterpublic static let shared = MyEventEmitter()

您应该重写 init 方法并将 self 分配给 shared

import Foundation

@objc(MyEventEmitter)
class MyEventEmitter: RCTEventEmitter {

public static var shared:MyEventEmitter?

override init() {
super.init()
MyEventEmitter.shared = self
}

override func supportedEvents() -> [String]! {
return [
... // my event list
]
}
}

这是因为 RN 已经实例化对象本身并分配桥,而当您自己执行时,桥不会被分配。

关于objective-c - 在 Swift 中实现 RCTEventEmitter 但未设置桥接异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com