mea*_*dre 8 objective-c ios phonegap-plugins cordova cordova-plugins
从cordova插件(iOS版)中立即触发后续回调,我遇到了麻烦.在XCode调试器中,我清楚地看到它的步骤
[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId];
Run Code Online (Sandbox Code Playgroud)
几次(立即连续),每次都略有不同pluginResult.这会被触发
[locationManager requestStateForRegion:region];
Run Code Online (Sandbox Code Playgroud)
我不(也不能)控制.
问题是,在Javascript方面,回调只被触发一次.
什么(实际上不是那么)奇怪的是,如果我在回调中引入了一些阻塞,比如alert(),回调被多次触发(如预期的那样).这很酷但我alert()在应用程序中不需要任何东西.
如果我理解它,commandDelegate应该注意线程和排队,但它似乎没有.问题是,每次sendPluginResult调用时如何获取JS回调.
非常感谢!
mea*_*dre 25
所以,问题不在于线程/排队.
原来你只允许使用callbackId一次,除非你告诉Cordova不要callbackId通过设置CDVPluginResult.keepCallback来清理它true.注意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];
Run Code Online (Sandbox Code Playgroud)
令人头疼的是,如果你alert()在回调中引入了一个阻塞调用,那么Cordova会让你连续多次sendPluginResult使用callbackId.
请记住,你可能需要sendPluginResult用CDVPluginResult它keepCallback是false释放callbackId你不再需要.
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |