Cordova iOS插件don';t火
我很难立即从cordova插件(iOS插件)启动后续回调。 在XCode调试器中,我清楚地看到了它的步骤Cordova iOS插件don';t火,ios,objective-c,cordova,phonegap-plugins,cordova-plugins,Ios,Objective C,Cordova,Phonegap Plugins,Cordova Plugins,我很难立即从cordova插件(iOS插件)启动后续回调。 在XCode调试器中,我清楚地看到了它的步骤 [self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId]; 多次(立即连续),每次使用稍微不同的pluginResult。 这是由 [locationManager requestStateForRegion:region]; 这是我无法控制的 问题是,在Java
[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId];
多次(立即连续),每次使用稍微不同的pluginResult
。
这是由
[locationManager requestStateForRegion:region];
这是我无法控制的
问题是,在Javascript方面,回调只触发一次
奇怪的是,如果我在回调中引入一些阻塞,比如alert()
,回调会被触发几次(正如预期的那样)。这很酷,但我不需要在应用程序中添加任何alert()
如果我理解的话,commandDelegate
应该负责线程和排队,但它似乎没有。问题是,如何在每次调用sendPluginResult
时激发JS回调
非常感谢 因此,问题不在于线程/排队 事实证明,您只允许使用
callbackId
一次,除非您通过设置CDVPluginResult.keepCallback
为true
告诉Cordova不要清理callbackId
。请注意,keepCallback
不是BOOL
属性,因此您可能需要调用[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:monitoredRegions.callbackId];
搞砸了的是,如果在该回调中引入一个阻塞调用,如alert()
,Cordova将允许您使用相同的callbackId
连续生成多个sendPluginResult
请记住,您可能需要使用CDVPluginResult
发送pluginresult
,其中keepCallback
为false
,以释放不再需要的callbackId
。感谢您解释setKeepCallback的功能。我一直在想这个场景。我有pluginResult.keepCallback=[NSNumber numberWithBool:YES]代码>并且它根本不起作用。我将其更改为[pluginResult setKeepCallbackAsBool:YES]代码>并且它神奇地工作了!谢谢你@meandre,我也有同样的问题