iOS Swift 如何从 CocoaPod 调试 SIGABRT:“致命错误:调用已删除的方法”?

问题描述 投票:0回答:3

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

运行项目时,当

SIGABRT
正在初始化时,我会在控制台中看到
fatal error: call of deleted method
SlideMenuControllerSwift
。没有给出其他错误消息。

  • 项目的源代码管理似乎与以前的状态完全相同 变化。
  • 我做了“干净”
  • 重新安装 Pod。
  • 删除 pods 目录并进行全新安装
  • 从设备中删除应用程序并再次运行
  • 重新签出到另一个文件夹中
  • 更新了 cocoapods gem
  • 甚至修改了函数以使用 self.addLeftGestures()

如何调试由 cocoa pod 抛出“致命错误:调用已删除方法”引起的问题?

更新:似乎该 pod 内的函数严重损坏,调用 init 中的另一个函数会导致错误的访问异常:

debugging swift3 cocoapods ios9 sigabrt
3个回答
39
投票

就我而言,我创建了一个使用发布构建配置的项目方案:

在此配置中,如果您的项目构建设置不允许在此发布模式下进行可测试,那么设置自定义断点或应用程序崩溃将无法让您正确调试,并且您将获得

fatal error: call of deleted method


解决方案:

检查项目构建设置中的“可测试性”。

确保您正在测试的构建配置为“是”。

就我而言,我暂时启用了 Releasetestability,将其设置为 Yes


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

查看更多详情这里


0
投票

对我来说这些步骤有效,

  1. 重置模拟器
  2. 删除派生数据
© www.soinside.com 2019 - 2024. All rights reserved.