gpt4 book ai didi

ios - 如何将 fatalError 消息保存到 iOS 崩溃日志中?

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:36 25 4
gpt4 key购买 nike

我有一个在 Xcode 8.2.1 中用 Swift 2 编写的 iOS 应用程序,它是为 iOS 10.2 构建的。

我收到了许多来自 TestFlight 的崩溃报告,尽管有符号化,但没有任何崩溃日志显示除堆栈跟踪之外的任何程序状态(无参数值、无局部变量、无堆对象等)。

...但在这些函数中,我可以看到可能会失败的代码(例如强制解包),但崩溃日志不会告诉我失败的位置或原因。

在 Xcode 中调试时,我可以使用 fatalError(message: String),我可以在其中放置我自己的消息,例如 "functionFoo returned nil""variable bar ==\""+ bar + "\"",除非使用 TestFlight 或 App Store 部署 fatalError 并且程序终止,但 消息 值未保存到崩溃日志中,因此毫无意义。

在其他环境中,例如 C#/.NET 和 Java,我可以简单地 throw new SomeExceptionType("my message") 并且所有信息都可以在任何全局 catch(Exception) 处理程序我有。

如何在 iOS/Swift 中实现相同的目标?

最佳答案

Swift does support error handling .您可以通过确认 Error 创建自己的错误类型协议(protocol)或使用现有的错误类型,然后通过调用 throw error 抛出错误。

但是 Swift 强制您向任何可能抛出错误的代码添加错误处理。您可以通过多种方式快速处理错误。

  1. throws 关键字应用于您的函数,这表明该函数在调用时可能会抛出错误,并且该错误应由调用者处理。

    func canThrowErrors() throws -> String
  2. 使用throws 关键字调用方法时,您必须在调用开始时添加try 关键字。所有这些 try 调用都应该通过将 throws 应用于方法来处理以仅传播错误或包装在 do-catch block 中:

    do {
    try canThrowErrors()
    try canThrowOtherErrors()
    } catch is SpecificError {
    // handling only specific error type
    } catch let error as SpecificError {
    // catches only specific error for type
    } catch {
    // catches all errors
    }
  3. 此外,您可以使用 try?try! 来抛出函数调用,以禁用错误传播并检索在错误和运行时返回 nil 的可选结果断言。

通过强制您在编译时处理所有错误,swift 避免了任何未定义的运行时行为和调试噩梦。

我建议仅在无法在不使应用程序崩溃的情况下从状态中恢复的情况下使用 fatalError 或任何其他运行时断言。不幸的是,没有办法处理来自 fatalError 的错误,因为它的使用仅保留用于此类场景。此外,在您的崩溃日志中,您只会获得导致崩溃的行号以获取有关崩溃原因的其他信息,我建议使用自定义日志记录或分析。

关于ios - 如何将 fatalError 消息保存到 iOS 崩溃日志中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42336529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com