gpt4 book ai didi

iOS Cordova : Does Cordova create multiple instances of an objective-C plugin when called more than once?

转载 作者:行者123 更新时间:2023-11-29 10:26:12 25 4
gpt4 key购买 nike

我正在开发基于 Cordova 的 iOS 混合应用程序。我们有一个 Objective-C 插件文件(MyPlugin.h 和 MyPlugin.m),它通常是 CDVPlugin 的子类。

我们从如下的 JavaScript 文件中调用 objective-C 插件。

cordova.exec(success, error, "MyPlugin", "callNativeActivity", args);

这里,success-成功回调函数,error-错误回调函数和 args- 参数数组。

下面是原生插件方法签名。

-(void)callNativeActivity:(CDVInvokedUrlCommand *)cdvCommand;

我们正在插件类中异步启动 NSURLConnection 任务。因此,它将等待来自 Web 服务器的响应。响应到来后,我们将其作为 CDVPluginResult 对象发送回 JavaScript。

if (isSuccess) {

CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:jsonPayload];
[self.commandDelegate sendPluginResult:result callbackId:cdvCommand.callbackId];

}else{
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:jsonPayload];
[self.commandDelegate sendPluginResult:result callbackId:cdvCommand.callbackId];
}

在少数情况下,我们需要从 JavaScript 同时调用插件不止一次(无需等待插件类的响应)。

如果我们多次调用它,Cordova 是如何处理的。它会扰乱我发回 JavaScript 的响应吗?我知道 Cordova 具有用于发送插件结果的不同回调 ID。但是,我的回复是否有可能被发送到错误的实例?

希望我的问题很清楚!!任何建议将不胜感激。

最佳答案

来自规范 Plugin Initialization and Lifetime :

One instance of a plugin object is created for the life of each UIWebView. Plugins are ordinarily instantiated when first referenced by a call from JavaScript. Otherwise they can be instantiated by setting a param named onload to true in the config.xml file.

这意味着,每个 CordovaApp/WebView 只有一个插件实例。

通过 ID 正确处理回调。

这样工作(不确定真正的实现):

  • 每次调用 cordova.exec(...) 都会生成一个回调 ID。
  • 应用程序映射到 callback[ID]= {success, error}
  • 您的 native 代码调用 onSuccess(ID) 并且成功将被调用
  • 调用onSuccess或onError后,回调[ID]设置为null

在现实世界中,也可以有某种进度监听器,但它们也应该使用正确的回调 ID。

关于iOS Cordova : Does Cordova create multiple instances of an objective-C plugin when called more than once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com