Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.4K
Vistas
React Native: llame a la función Swift nativa que llama a otra función que activa el evento de envío RCTEventEmiiter que provoca un error RCTCallableJSModules

Tengo esta clase Swift, la función emitLogEvent llama a RCTEventEmitter sendEvent que se está escuchando en React Native. Si llamo a esta función directamente desde React, el evento de envío funciona y puedo cerrar sesión en React Native.

 import Foundation import React @objc(NativeGlobalEventEmitter) class NativeGlobalEventEmitter: RCTEventEmitter { @objc func emitLogEvent() { sendEvent(withName: "globalEvent", body: ["count": 1]) } override func supportedEvents() -> [String]! { return [ "globalEvent" ] } override static func requiresMainQueueSetup() -> Bool { return true } override func constantsToExport() -> [AnyHashable : Any]! { return ["initialCount": 0] } }

Si introduzco otra clase simple con una función que llama a emitLogEvent

 import Foundation @objc(TestMe) class TestMe: NSObject { @objc func runTest() { print(200) let emitter = NativeGlobalEventEmitter() emitter.emitLogEvent(); } }

Y luego llame a runTest() desde React Native, se imprime 200 pero aparece el error

 Exception 'Error when sending event: globalEvent with body: { count = 1; }. RCTCallableJSModules is not set. This is probably because you've explicitly synthesized the RCTCallableJSModules in NativeGlobalEventEmitter, even though it's inherited from RCTEventEmitter.' was thrown while invoking runTest on target TestMe with params ( )

¿Por qué estaría pasando esto? Puedo llamar a cualquiera de las funciones directamente y funcionan, pero llamar a una función que emite un evento de otra clase provoca el error.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Encontré la solución aquí .

Este problema con esto es:

 func runTest() { print(200) let emitter = NativeGlobalEventEmitter() emitter.emitLogEvent(); }

Crear una instancia de NativeGlobalEventEmitter. Esto se debe a que RN ya creó el objeto y lo asignó al puente.

En su lugar, anula init() y establece una propiedad en la clase

 public static var shared: NativeGlobalEventEmitter? override init() { super.init() NativeGlobalEventEmitter.shared = self }

Entonces puedes usarlo así

 NativeGlobalEventEmitter.shared?.emitLogEvent()
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda