Las devoluciones de llamada subsiguientes de un complemento Cordova iOS no se activan

Tengo problemas con la activación inmediata de devoluciones de llamada posteriores de un complemento cordova (uno iOS). En el depurador XCode, veo claramente que pasa de un paso a otro

[self.commandDelegate sendPluginResult:pluginResult callbackId:monitonetworkingRegions.callbackId]; 

varias veces (en sucesión inmediata), cada vez con un pluginResult ligeramente diferente. Eso se desencadena por

 [locationManager requestStateForRegion:region]; 

que no controlo (y no puedo).

El problema es que, en el lado de Javascript, la callback se activa una sola vez.

Lo que (en realidad no es así) extraño es que si introduzco un locking en esa callback, como alert() , la callback se dispara varias veces (como se esperaba). Eso es genial, pero no necesito ninguna alert() en la aplicación.

Si lo entiendo, el commandDelegate debería encargarse de enhebrar y commandDelegate queue, pero parece que no lo hace. La pregunta es cómo hacer que se sendPluginResult la callback de JS cada vez que se sendPluginResult .

¡Muchas gracias!

Entonces, el problema no estaba en threading / queuing.

Resultó que se le permite utilizar un callbackId solo una vez a less que le indique a Cordova que no limpie ese callbackId estableciendo CDVPluginResult.keepCallback en true . Preste atención a que keepCallback no es una propiedad BOOL , por lo que puede necesitar llamar a [pluginResult setKeepCallbackAsBool:YES];

 CDVPluginResult* pluginResult = [sendPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:key]; [pluginResult setKeepCallbackAsBool:YES]; // here we tell Cordova not to cleanup the callback id after sendPluginResult() [self.commandDelegate sendPluginResult:pluginResult callbackId:monitonetworkingRegions.callbackId]; 

Lo que arruina las cosas es que si introduce una llamada de locking como alert() en esa callback, Cordova le permitirá hacer múltiples sendPluginResult sucesivas con el mismo callbackId .

Tenga en count que es posible que necesite sendPluginResult con un CDVPluginResult que keepCallback es false para liberar el callbackId que ya no necesita.