【问题标题】:SwiftUI Crash LayoutComputer.EngineDelegate.sizeThatFits?SwiftUI 崩溃布局Computer.EngineDelegate.sizeThatFits?
【发布时间】:2021-04-25 15:26:27
【问题描述】:

我无法确定此崩溃的来源,并且当我“在项目中打开”时,Xcode 没有指向我代码的任何特定区域。这可能是什么原因造成的?好像是点击某个按钮的时候。

【问题讨论】:

  • 可能是一个 SwiftUI 错误。如果您可以将代码简化为仍然会导致崩溃的最小示例,那将有助于我们帮助调试它。
  • 谢谢,但它是一个巨大的应用程序,这是我的问题,我什至无法告诉它发生的过程或文件。
  • 很难找到问题,但我可以从今天开始将您指向this tweet。它可能与您的错误相关或相同。它可能没有帮助,但是如果不能减少代码,就很难调试这样的东西。
  • 谢谢,是的,我同意,这个堆栈跟踪没什么可继续的

标签: ios swift xcode swiftui crash


【解决方案1】:

解决方案

在我遇到同样的问题后,我的解决方案是清理我的构建文件夹,然后为我的目标设备执行我的应用程序的完整构建,而不是 清理我的构建文件夹,只是执行我的应用程序的增量构建。

触发此错误并解决问题的步骤

  1. 我有一个 Xcode 项目,包含:

    1. 我添加为“本地 Swift 包”的 Swift 包,其中包含:

      View 协议的扩展中定义公共方法(我们称之为modifyListRow)的模块。

    2. 我的适用于 iOS 的 SwiftUI 应用程序,其中包含:

      我的@main App 渲染了一个 SwiftUI 视图,其中包含:

       List { ForEach { MyRow.modifyListRow() } }
      
  2. 然后,我对我的应用进行了完整构建和运行 - 这依赖于本地 Swift 包,在我的物理 iPhone X 设备上启动该应用后,我发现一切正常。

  3. 然后我修改了modifyListRow 方法的主体,以这样一种方式,它会影响由ForEach 视图生成的列表行的大小应如何由 SwiftUI 框架计算。

  4. 然后我对我的应用进行了增量构建和运行。

  5. 这一次,在我的 iPhone 上启动我的应用程序后,我只看到一个空白屏幕,因为 SwiftUI 未能呈现我的应用程序的任何视图,并且我在 Xcode 中看到我的应用程序在尝试计算 @ 时崩溃了987654327@ 的视图 - 大概是我的ForEach 视图生成的列表行之一。

  6. 然后我清理了我的构建文件夹,并对我的项目进行了完整构建和运行,在我的 iPhone 上启动该应用程序后,我看到这一次一切正常。

我的应用程序错误原因的假设

据推测,在我进行第一次 full 构建后,Xcode 已经缓存了包含列表的 SwiftUI 视图的编译代码,但并未使该视图的编译代码无效,尽管事实上我'd 修改了 modifyListRow 方法的主体,使得 List-rows 需要由 SwiftUI 框架以不同方式计算它们的大小。这使得我的 SwiftUI 视图不会在我执行的 增量 构建期间重新编译,尽管 modifyListRow 方法 已重新编译。因此,我的 SwiftUI 视图和 modifyListRow 方法的编译代码在构建工件中变得“不同步”,因此 SwiftUI 框架无法计算列表行的大小。但是清理我的构建文件夹并执行完整构建,使得我的 SwiftUI 视图将与 modifyListRow 方法一起重新编译,因此,我的 SwiftUI 视图的编译代码 modifyListRow 方法在构建工件中恢复为“同步”,就像它们最初一样。这使得 SwiftUI 框架能够成功计算列表行的大小。

但请记住,这只是我的假设关于我的应用程序出现错误的原因 - 它可能不正确。

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2014-03-10
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多