Nachfolgende Rückrufe von einem Cordova iOS-Plugin werden nicht ausgelöst

7

Ich habe Probleme damit, sofort nachfolgende Callbacks von einem cordova-Plugin (einem iOS) zu feuern. Im XCode-Debugger sehe ich es deutlich über

%Vor%

mehrmals (in unmittelbarer Folge), jedes Mal mit einem etwas anderen pluginResult . Das wird ausgelöst durch

%Vor%

was ich nicht kontrolliere (und nicht kann).

Das Problem ist, dass auf der Javascript-Seite der Callback nur einmal ausgelöst wird.

Was (eigentlich nicht so) seltsam ist, ist, dass, wenn ich eine Blockierung in diesen Callback einfüge, wie alert() , der Callback (wie erwartet) mehrmals ausgelöst wird. Das ist cool, aber ich brauche keine alert() in der App.

Wenn ich es verstehe, sollte commandDelegate sich um Threading und Warteschlangen kümmern, scheint aber nicht. Die Frage ist, wie man den JS-Callback jedes Mal ausgelöst bekommt, wenn sendPluginResult aufgerufen wird.

Vielen Dank!

    
meandre 16.07.2014, 09:14
quelle

1 Antwort

22

Das Problem war also nicht Threading / Queuing.

Es stellte sich heraus, dass Sie callbackId nur einmal verwenden dürfen, es sei denn, Sie raten Cordova, den callbackId nicht zu bereinigen, indem Sie CDVPluginResult.keepCallback auf true setzen. Achten Sie darauf, dass keepCallback keine BOOL -Eigenschaft ist, daher müssen Sie möglicherweise [pluginResult setKeepCallbackAsBool:YES];

aufrufen %Vor%

Was vermasselt ist, dass, wenn Sie in diesem Callback einen blockierenden Aufruf wie alert() einführen, Cordova Ihnen erlaubt, mehrere aufeinanderfolgende sendPluginResult mit demselben callbackId zu erstellen.

Beachten Sie, dass Sie möglicherweise sendPluginResult mit einem CDVPluginResult verwenden müssen, das keepCallback ist false , um das callbackId freizugeben, das Sie nicht mehr benötigen.

    
meandre 17.07.2014, 12:38
quelle