Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cordova iOS插件don';t火_Ios_Objective C_Cordova_Phonegap Plugins_Cordova Plugins - Fatal编程技术网

Cordova iOS插件don';t火

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

我很难立即从cordova插件(iOS插件)启动后续回调。 在XCode调试器中,我清楚地看到了它的步骤

[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,我也有同样的问题