如何在Xcode中调试“前提条件失败”?


9

我在Xcode 11上构建了SwiftUI应用程序,但是当我切换到应用程序中的特定选项卡时,它立即终止。

问题是,它始终指向Application Delegate文件,我认为这并不是真正的问题。我还在控制台中收到此错误,仅此precondition failure: invalid input index: 2而已,没有更多有关此错误来自何文件,数组或函数的更多详细信息。

在此处输入图片说明

Xcode中是否可以隔离导致此问题的任何方法?


打印控制台中显示的内容?似乎存在索引超出范围错误。检查目标视图控制器上可能有的任何阵列。或仅检查导航到Tab的ViewController是否已初始化并且在tabController.viewControllers数组中。
亚历山大,

@Alexander,您好,对于初始化,我确定我的视图已正确初始化。是的,我也认为这是一个数组问题,但是我不知道哪个函数和哪个类中的哪个数组,因为该视图及其子视图充满了数组。这就是为什么我想知道如何正确调试。目前,我正在尝试更改代码中的许多内容,希望能解决这个问题(甚至在不知不觉中)。
灰色的

在非常相似的情况下,我得到了这个。对我来说,该应用程序崩溃时出现了相同的错误并调试控制台输出。它似乎是C ++前提条件失败(因此在Swift本身内-因此断点不起作用)。对我来说,它在尝试访问GeometryProxy的大小时发生。
Daniel Thorpe

同样在这里-访问GeometryProxy的大小,以复制到@Binding
Grimxn19年

发生在我身上。堆栈中的下一个调用是GeometryProxy.size.getter(),但是仅当我以特定顺序访问SwiftUI选项卡时,它才对我发生。仅在导致崩溃的选项卡中使用GeometryReader(仅在第三次访问该选项卡时才会发生崩溃)。
tarasis

Answers:


10

我有一个TabView包含一个使用列表的视图。切换标签时,我的应用程序崩溃时出现类似错误:“前提条件失败:属性无法设置初始值:99”,这崩溃了:

var body: some View {
    TabView {
        ListView()
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

将ListView包裹在NavigationView中修复了崩溃。我在Caleb Wells的 “ Swift Live – 007 SwiftUI TabView && List”中看到了NavigationView的这种用法。 https://youtu.be/v1A1H1cQowI

https://github.com/calebrwells/A-Swiftly-Tilting-Planet/tree/master/2019/Live%20Streams/TabView%20List

这工作:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

我在Form内部TabView已经有相同的错误NavigationView。要解决崩溃问题,我必须将包裹Form在另一个假人中,NavigationView然后使用隐藏在屏幕外.padding(.top, -60)。♂‍♂️
Palimondo

1
这可行,但是并不理想。我不想要导航视图。
Imthath

我的自定义视图已经在NavigationView中具有列表。我所做的是我从“自定义视图”中删除了NavigationView,并按照上面的指定进行了添加。更改之后,崩溃消失了。
Stefan Vasiljevic,

@Palimondo我认为应该是-100,而不是-60。感谢您的修复
PaFi

@Imthath我同意你的
观点
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.