2017-01-25 158 views
0

我正在开发iOS的科尔多瓦插件。我的'plugin.js'中有一个方法,我只从应用程序调用一次(javascript),开始监听本地部分的回调。当调用此方法时,我将callbackId存储在Objective-C类中,并希望稍后发送回调(可能有多个回调),因此我使用存储的callbackId发送CDVPluginResult,并将'keepCallback'设置为true 。但回调永远不会到达'plugin.js',因此不会在应用程序中。科尔多瓦插件回调没有被调用(iOS)

Objective-C的方法1(这是听者部分):

- (void)listenForNews:(CDVInvokedUrlCommand *)command 
{ 
    self.storedCallbackId = command.callbackId; 
    ... 

Objective-C的方法2(这是正在被多次调用异步方法)

- (void)onNewsReceived 
{ 
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; 
    [pluginResult setKeepCallbackAsBool:YES]; 
    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.storedCallbackId]; 

我已经已经验证'storedCallbackId'已被正确存储和读取。

任何想法?

回答

1

我像做以下in my plugin和它的作品,所以这给一试:

- (void)listenForNews:(CDVInvokedUrlCommand *)command 
{ 
    self.storedCallbackId = command.callbackId; 
    ... 
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT]; 
    [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; 
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 


- (void)onNewsReceived 
{ 
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; 
    [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; 
    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.storedCallbackId]; 
+0

感谢@DaveAlden。我们可以解决这个问题。最后,这是一个插件类的多个实例的问题,这导致Cordova松开了回调(当然)。 – Dani

相关问题