iOS Swift如何调试来自CocoaPod的SIGABRT:“fatal error: call of deleted method”?

26

我有一个使用SlideMenuControllerSwift的应用程序。 我修改了一些代码以查看如何呈现不同的面板,然后回滚了更改。

运行项目时,初始化SlideMenuControllerSwift时在控制台中出现SIGABRT fatal error: call of deleted method。没有给出其他错误消息。

  • 该项目的源代码控制似乎与更改之前完全相同。
  • 我进行了“清理”操作
  • 重新安装了pods。
  • 删除了pods目录并进行了干净的安装
  • 从设备中删除应用程序并再次运行
  • 在不同的文件夹中进行了新的检查
  • 更新了cocoapods gem
  • 甚至修改了函数以使用self.addLeftGestures()

如何调试由cocoa pod引发的“fatal error: call of deleted method”问题?

enter image description here

更新:似乎该 pod 中的函数出现了严重故障,调用 init 中的另一个函数会导致 bad access 异常:

enter image description here


同一分支上的另一个开发人员没有问题。我已经修改了Cocoapod代码,避免调用该函数,而是将代码直接粘贴在那里。 - Alex Stone
可能的解决方案:https://dev59.com/k1oT5IYBdhLWcg3w8S61 - Alex Stone
我假设你一开始使用了pod,然后决定将其用作源代码,但如果你在Interface Builder中有一个IBOutlet引用,你应该将其模块目标更改为你的项目目标,而不是删除pod目标。 - ugur
1
只需检查产品 -> 方案 -> 编辑方案 -> 在信息部分,方案应为Debug而不是Release。 - shubham mishra
我的问题是在IBOutlet中使用了错误的类。 - demensdeum
2个回答

39

在我的情况下,我创建了一个使用发布版本构建配置的项目方案:

编辑方案

在这种配置下,如果您的项目构建设置不允许在此发布模式下进行可测试性,则设置自定义断点或应用程序崩溃将无法正确调试,并会出现 fatal error: call of deleted method


解决方案:

检查项目构建设置中的 "testability"。

项目构建设置

确保您正在测试的构建配置中它为 "Yes"。

在我的情况下,我通过将其设置为 "Yes" 暂时启用了 Releasetestability


1

对于在 XCode 11.4 上使用 SwiftUI 并尝试访问 ObservableObject 子类上的属性出现此错误的任何人,例如。

class Model: ObservableObject {
    @Published var name = ""
}

class ModelSub: Model {}

let model = ModelSub()

// This line causes `fatal error: call of deleted method` on XCode 11.4
$model.name

// Instead do 
model._name.projectedValue

查看更多细节在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接