【问题标题】:EXC_BAD_ACCESS error on @escaping completion handler when called from Objective C code从 Objective C 代码调用 @escaping 完成处理程序时出现 EXC_BAD_ACCESS 错误
【发布时间】:2020-07-25 14:22:06
【问题描述】:

我有一个 Swift 函数 public func doSomething( aKey : String, completed: @escaping (AModel?, TagError?)->()) {} 需要暴露给 Objective C 代码以供使用。我创建了一个 Objective C 类包装器,例如

@objc
public func doSomethingObjCWrapper(aKey : String) {
       anObject.doSomething(aKey: aKey) { (modelA, error) in
            if let whtModel = modelA {
                // All good

                DispatchQueue.main.async {
                    print("ok")
                }

            } else {
                print("\(error?.localizedDescription ?? "Unknown error")")
            }
        } 
}

从 Objective C 代码中调用。每当代码被触发时,我总是会在 anObject.doSomething 行中收到 EXC_BAD_ACCESS 错误。任何线索将不胜感激。

【问题讨论】:

  • 可能问题出在anObject。但是你没有告诉我们那是什么或它来自哪里。我们对doSomethingObjCWrapper 的签名或Objective-C 在完成处理程序中交给您的内容一无所知。如果您需要帮助,请提供更多信息。
  • 什么是对象?什么anObjet的寿命?你会显示一个Object类型定义的代码吗?

标签: ios objective-c swift


【解决方案1】:

anObject 是否符合NSObject 协议?

如果没有,您可以尝试这种方式,因为大多数 Objective-C 类层次结构的根类,子类从根类继承到运行时系统的基本接口以及充当 Objective-C 对象的能力

参考https://developer.apple.com/documentation/objectivec/nsobject

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多