2015-03-04 23 views
8

Dato che io vengo da un background di Java non sono un esperto di Objective-C e lottando in tal modo un po 'per modificare il codice seguente:Come sostituire i metodi deprecati inSuccessCallbackString e writeJavascript in Objective-C?

- (void) loadHTML:(CDVInvokedUrlCommand*)command 
{ 

    NSString* callbackId = command.callbackId; 
    NSArray *arguments = command.arguments; 

    CDVPluginResult* pluginResult; 

    if (webView) 
    { 
     NSString *stringObtainedFromJavascript = [arguments objectAtIndex:0]; 
     [webView loadHTMLString:stringObtainedFromJavascript baseURL:baseURL]; 

     if (screenNeedsInit) { 
      [self makeScreenVisible]; 
     } 

     pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: WEBVIEW_OK]; 
     [self writeJavascript: [pluginResult toSuccessCallbackString:callbackId]]; 
    } 
    else 
    { 
     pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString: WEBVIEW_UNAVAILABLE];   
     [self writeJavascript: [pluginResult toErrorCallbackString:callbackId]];  
    } 

} 

Il compilatore si lamenta che sia, writeJavascript così come toErrorCallbackString sono deprecati e Dovrei sostituirli con evalJS e pluginResult.

Quindi, il mio primo passo è stato quello di cambiare questa linea:

[self writeJavascript: [pluginResult toSuccessCallbackString:callbackId]]; 

come questo:

[self.commandDelegate evalJs: [pluginResult toSuccessCallbackString:callbackId]]; 

Quindi, questo ha funzionato, ma ho ancora bisogno di sostituire toSuccessCallbackString con sendPluginResult, così ho concentrandoci questa:

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

Ma come faccio a combinare evalJS con sendPluginResult adesso? Nella vecchia versione mi sembrava che pluginResult toSuccessCallbackString restituisse semplicemente un NSString* ma ora con sendPluginResult sembra esserci una richiamata? Come posso gestirlo per passare il risultato di sendPluginResult a evalJS.

Nota: sto utilizzando la Cordova api per questo.

Si prega di essere gentile, non ho ancora scritto molto Objective-C e ho difficoltà con la sintassi.

risposta

11

Utilizzare questa:

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

se è stato utilizzato CDVCommandStatus_OK sul pluginResult, allora chiamerà il callback successo, se è stato utilizzato CDVCommandStatus_ERROR allora chiamerà il callback errore

Javascript dovrebbe essere qualcosa In questo modo:

cordova.exec(successCallback, errorCallback, "YourPluginName", "loadHTML",["yourHtmlString"]); 
+0

Qual è il metodo di richiamata in cui è possibile chiamare [self.commandDelegate evalJs: javascriptString]; Ho sostituito [pluginResult toErrorCallbackString: command.callbackId] in [self.commandDelegate sendPluginResult: pluginResult callbackId: callbackId]; Ma in quale metodo otterrò la stringa Javascript per chiamare il metodo evalJs. Grazie in anticipo. –

+0

La domanda era su come sostituire il deprecato 'writeJavascript' e la risposta è usare' sendPluginResult' per la domanda use case. Se si desidera utilizzare evalJs, il caso d'uso potrebbe essere diverso. Puoi creare una nuova domanda fornendo maggiori informazioni? – jcesarmobile

+0

Oh oki .. I tgt sendPluginResult è quello di sostituire aErrorCallbackId e toSuccessCallbackId e writeJavascript metodo dovrebbe essere sostituito dal metodo evalJs .. Se sendPluginResult fa il lavoro, allora è quello che mi serviva .. per favore correggimi se la mia comprensione è sbagliata. Grazie! –