如何在Objective-C中将已弃用的方法替换为SuccessCallbackString和writeJavascript?

时间:2015-03-04 08:47:18

标签: ios objective-c cordova callback cordova-plugins

由于我来自Java背景,因此我不是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]];    
    }

}

编译器抱怨{,writeJavascripttoErrorCallbackString都已弃用,我应该将其替换为evalJSpluginResult

所以,我的第一步是改变这一行:

[self writeJavascript: [pluginResult toSuccessCallbackString:callbackId]];
像这样:

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

所以,这很有用,但我仍然需要用toSuccessCallbackString替换sendPluginResult,所以我用谷歌搜索了这个:

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

但是如何将evalJSsendPluginResult结合起来呢?在旧版本中,我认为pluginResult toSuccessCallbackString只返回NSString*,但现在sendPluginResult似乎涉及回调?如何管理此操作以将sendPluginResult的结果传递给evalJS

注意:我正在使用cordova api。

请保持温和,我还没有写过很多Objective-C而且我在语法方面很难。

1 个答案:

答案 0 :(得分:11)

使用此:

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

如果您在pluginResult上使用CDVCommandStatus_OK,那么它将调用成功回调,如果您使用CDVCommandStatus_ERROR则会调用错误回调

你的javascript应该是这样的:

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