如何替换 Objective-C 中已弃用的方法 toSuccessCallbackString 和 writeJavascript?

How do I replace the deprecated methods toSuccessCallbackString and writeJavascript in Objective-C?

由于我来自 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]];

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

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

但是现在如何将 evalJSsendPluginResult 结合起来呢?在我看来,在旧版本中,pluginResult toSuccessCallbackString 只是返回了一个 NSString*,但现在 sendPluginResult 似乎涉及回调?我如何管理它以将 sendPluginResult 的结果传递给 evalJS.

注意:我正在为此使用 cordova api。

请客气点,我写得不多Objective-C,我还在纠结语法。

使用这个:

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

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

你的 javascript 应该是这样的:

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