Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 在PhoneGap插件中保留回调上下文?_Cordova_Phonegap Plugins_Cordova 3 - Fatal编程技术网

Cordova 在PhoneGap插件中保留回调上下文?

Cordova 在PhoneGap插件中保留回调上下文?,cordova,phonegap-plugins,cordova-3,Cordova,Phonegap Plugins,Cordova 3,我需要实现一些功能来触发一个间隔动作,并将结果发送回javascript 为了简化事情,我将使用PhoneGap文档中的echo示例: -(void)echo:(CDVInvokedUrlCommand*)命令 { [self.commandDelegate运行背景:^{ CDVPluginResult*pluginResult=nil; NSString*echo=[command.arguments objectAtIndex:0]; 如果(echo!=nil&[echo length]>0

我需要实现一些功能来触发一个间隔动作,并将结果发送回javascript

为了简化事情,我将使用PhoneGap文档中的echo示例:

-(void)echo:(CDVInvokedUrlCommand*)命令
{
[self.commandDelegate运行背景:^{
CDVPluginResult*pluginResult=nil;
NSString*echo=[command.arguments objectAtIndex:0];
如果(echo!=nil&[echo length]>0){
pluginResult=[CDVPluginResult resultWithStatus:CDVCommandStatus\u确定消息字符串:echo];
}否则{
pluginResult=[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
}
我想让这个调用与echo每秒进行一次相同的回调,直到调用
stop

我创建了一个计时器,它每秒调用另一个函数,但我不知道如何保持回调的上下文以将结果发送到

//启动计时器
-(void)start:(CDVInvokedUrlCommand*)命令
{
[NSTimer scheduledTimerWithTimeInterval:1.0
目标:自我
选择器:@选择器(操作:)
用户信息:无
重复:是];
}
//号召行动
-(void)action:(CDVInvokedUrlCommand*)命令
{
[self.commandDelegate运行背景:^{
NSLog(@“已触发”);
}];
}

在回调的上下文中保持这一点会有很大帮助。谢谢

hi要获得对js的多次回调,您可以使用setKeepCallback(true)

乙二醇


您将需要以下内容:

NSString *myCallbackId;
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
[self.commandDelegate sendPluginResult:pluginResult callbackId:myCallbackId];
作为实例级变量(在任何方法之外,因此保留其值)。当您第一次进入插件代码时设置它:

myCallbackId = command.callbackId;
然后,在实例化PluginResult之后,但在使用它之前,执行以下操作:

NSString *myCallbackId;
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
[self.commandDelegate sendPluginResult:pluginResult callbackId:myCallbackId];
这将告诉它保持回调有效,以备将来使用

然后做一些类似的事情:

NSString *myCallbackId;
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
[self.commandDelegate sendPluginResult:pluginResult callbackId:myCallbackId];

如果它对某人有帮助,在安卓系统中,我不使用PluginResult,我仍然能够保留对CallbackContext的引用并随时调用它。我不确定这是不是正确的方法,但我可以确认它对我有效。

谢谢,你能提供一些关于这是如何工作的更多上下文吗?我不太明白我该如何实现这一点。Arjun t Raj:请回答我的问题,这很好,(虽然我不是一个客观的C开发人员,但您已经记录了您的代码,所以我对它有点了解)。我的问题是这样做之后,您将如何在Javascript中处理它。在我的实现中(当然是在Android中),我得到了一个关于
secondCallback
的控制台日志,因为我已经将“keepcallback”设置为true,当第二个结果通过时,我就得到了控制台日志。那么,如何处理这一问题。][]我不知道--我还没有在Android上试用过。如果它能工作,并且唯一的问题是控制台日志消息,我会忽略它。:-)一点也不@Tony,日志不是问题。当
setKeepCallback
id设置为
true
时,我得到了一些东西,这是一个绿灯。我关心的是,我想处理代码中的“第二次回调”。此外,您不必担心Android,只需使用javascript(或HTML)来处理它们。