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

boo*_*oom 5 phonegap-plugins cordova cordova-3

我需要实现一些在一个时间间隔内触发操作的功能,并将结果发送回javascript.

为简化起见,我将使用PhoneGap文档中的echo示例:

- (void)echo:(CDVInvokedUrlCommand*)command
{
  [self.commandDelegate runInBackground:^{

    CDVPluginResult* pluginResult = nil;
    NSString* echo = [command.arguments objectAtIndex:0];

    if (echo != nil && [echo length] > 0) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
    }

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

  }];
}
Run Code Online (Sandbox Code Playgroud)

我想让这个调用与echo一样回调,直到stop被调用.

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

//Starts Timer
- (void)start:(CDVInvokedUrlCommand*)command
{
  [NSTimer scheduledTimerWithTimeInterval:1.0
                                  target:self
                                  selector:@selector(action:)
                                  userInfo:nil
                                  repeats:YES];
}

//Called Action
-(void)action:(CDVInvokedUrlCommand*)command
{
  [self.commandDelegate runInBackground:^{

    NSLog(@"TRIGGERED");

  }];
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将其保持在回调的上下文中都会很棒.谢谢!

小智 10

你会想要有类似的东西:

NSString *myCallbackId;
Run Code Online (Sandbox Code Playgroud)

作为实例级变量(在任何方法之外,因此它保留其值).首次进入插件代码时设置它:

myCallbackId = command.callbackId;
Run Code Online (Sandbox Code Playgroud)

然后,在实例化PluginResult之后,但在使用之前,执行以下操作:

[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
Run Code Online (Sandbox Code Playgroud)

这将告诉它保持回调有效以备将来使用.

然后做一些事情:

[self.commandDelegate sendPluginResult:pluginResult callbackId:myCallbackId];
Run Code Online (Sandbox Code Playgroud)


Arj*_*Raj 2

你好,为了获得很多对 js 的回调,你可以使用setKeepCallback(true)

例如

 PluginResult p3=   new PluginResult(PluginResult.Status.OK, "0");
 p3.setKeepCallback(true);
Run Code Online (Sandbox Code Playgroud)