问题描述
我在 Framework A (框架A)内写了一个下面的函数:
open func invokeTracking(key: String,bundle: Bundle? = Bundle.main) {
let qos = dispatchQoS.QoSClass.default
dispatchQueue.global(qos: qos).async {
self.invokeAsyncTracking(key: String,bundle: bundle)
}
我在多个地方的Xcode项目中以及从其他框架中调用它。
在Xcode项目中:
override func viewDidLoad() {
super.viewDidLoad()
HelperClass.invokeTracking(key: "Camino",bundle: Bundle? = Bundle.main)
}
类似地从框架B
调用func callMainTracking() {
super.viewDidLoad()
HelperClass.invokeTracking(key: "Carthage",bundle: Bundle? = Bundle.main)
}
这很好,已经工作了将近一年。最近,我向这样的调用跟踪方法添加了另一个附加的默认参数,以免影响如下所示的现有方法调用。我正在尝试设置全局变量的此参数的值:
open func invokeTracking(key: String,bundle: Bundle? = Bundle.main,conventDict: [String: Any] = [:]) {
mainDict = conventDict
let qos = dispatchQoS.QoSClass.default
dispatchQueue.global(qos: qos).async {
self.invokeAsyncTracking(key: String,bundle: bundle)
}
尝试访问该默认参数时,应用程序在主线程mainDict = conventDict
上崩溃。如果我在异步内部执行该操作,则会在该异步线程中崩溃。但是,仅当从 Framework B 调用它时,而不是从Xcode项目调用它时,才发生崩溃。此外,这种崩溃仅发生在设备上。
- 试图将默认参数声明为可选参数,并使用if对其进行拆包。
- 尝试了不同的数据类型。
- 尝试通过更改参数顺序。
唯一不会崩溃的方法是,当我在调用此方法时从框架B 发送此默认参数的值。
func callMainTracking() {
super.viewDidLoad()
HelperClass.invokeTracking(key: "Carthage",conventDict: ["test": "123"])
}
但是,这违背了使用默认参数的目的。我是调试Xcode崩溃的新手,因此将不胜感激。
我使用了乐器,试图找到一个僵尸,但没有一个。该应用只是崩溃了,并且没有检测到僵尸进程。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)