【问题标题】:Command Delegate is not working calling from Swift to Objective CCommand Delegate 无法从 Swift 调用到 Objective C
【发布时间】:2021-06-18 21:10:12
【问题描述】:

我正在尝试连接 Swift 5 和现有的 Objective c 函数。通常,Cordova 请求会命中 Swift 层,该层又调用 Objective C 并将结果返回给 Cordova。在编译期间,我收到此错误

       NSLog(@"Result : %@ ", result);
       CDVPluginResult* pluginResult;
       pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
       // Below line throwing "No known class method for selector 'commandDelegate'"
      [[self commandDelegate] sendPluginResult:pluginResult callbackId:command.callbackId];

【问题讨论】:

    标签: ios swift objective-c cordova


    【解决方案1】:

    commandDelegate 属性是 instance 属性,而不是 class 属性。线索在错误“No known class method”中——上面的代码当前必须在类方法中(在ObjC中用+表示),但commandDelegate属性只能从实例方法中引用(用-)。 self 在这种情况下是对类本身的引用,而不是类的实例。

    确保封闭函数是一个实例方法(如果你需要的话)。还要确保您的插件实现了CDVPlugin 接口(插件头文件中的@interface MyPlugin : CDVPlugin),否则您将无法访问commandDelegate 属性。

    【讨论】:

    • 感谢您的回复,让我检查一下。
    【解决方案2】:

    使其成为全局变量。

    结构全局变量 { 静态变量 sampleCommandDelegate:有吗? }

    【讨论】:

    • 这是解决它的一种方法,但它似乎有点破解。不过,这对于您的用例来说可能是完全可以接受的。我建议花时间重构代码,这样您就不需要静态引用命令委托。你在你的方法中做了什么,这意味着它必须是类方法而不是实例方法?
    • @CPR 是的,你是对的并且同意。这个修复将是暂时的。我必须重新访问:)
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多