我正在Xcode 11上构建一个SwiftUI应用程序,但是当我切换到该应用程序中的特定选项卡时,它将立即终止。
事实是,它始终指向Application Delegate
文件,我认为这并不是真正的问题。我也在控制台precondition failure: invalid input index: 2
中收到此错误,仅此而已,没有更多有关此错误来自哪个文件,数组或函数的更多详细信息。
Xcode中是否有任何方法可以隔离导致此问题的原因?
答案 0 :(得分:7)
我也遇到了这个问题。我只想分享它,以防有人发现它有用。
缩短答案
将视图换成NavigationView
会引发错误。使用.navigationViewStyle(StackNavigationViewStyle())
解决了我的问题。
长答案
我有这样的东西:
NavigationView {
GeometryReader { proxy in
VStack {
Text("Dummy")
Spacer()
MyView() // CONTAINS HAS A GEOMETRY READER TOO
.frame(width: min(proxy.size.width, proxy.size.height),
height: min(proxy.size.width, proxy.size.height))
Spacer()
Text("Dummy")
}
}
}
然后,MyView
的内部也有GeometryReader
。所描述的代码将失败。如果NavigationView
被删除,则前提条件失败不会发生。
我在.navigationViewStyle(StackNavigationViewStyle())
上使用了NavigationView
,这解决了我的问题。
答案 1 :(得分:1)
我有一个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
这有效:
var body: some View {
TabView {
NavigationView { ListView() }
.tabItem {
Image(systemName: "list.dash")
Text("List")
}
答案 2 :(得分:0)
我在模拟器上遇到此运行时错误。就我而言,问题是NavigationBarItems
,我在错误的块中使用了它,如下所示:
NavigationView {
Group {
if something {
ScrollView {
...
}//ScrollView
} else {
...
}
}//group
.navigationBarItems(trailing: self.favoriteItem) // CRASH**
}
我移动了NavigationBarItems
修饰符,并将其赋予了ScrollView
:
NavigationView {
Group {
if something {
ScrollView {
...
}//ScrollView
.navigationBarItems(trailing: self.favoriteItem) // NO CRASH**
} else {
...
}
}//group
}
答案 3 :(得分:0)
我认为Apple已提交了一个错误
https://developer.apple.com/forums/thread/133958
与GeometryReader崩溃有关的问题
在我的情况下,当尝试将GeometryReader用作以下命令时,我会遇到与tabBar类似的问题和消息“前提条件失败:输入索引无效:2”
let w = geo.size.width
我已经尝试过在其周围使用一个保护声明...没有用-也许我不理解GUARD。
答案 4 :(得分:0)
在我的情况下,我使用了一个已经位于NavigationView内部的TabView。在我的第四个标签中,我使用了一个命名空间进行动画处理,并在添加了命名空间动画后崩溃了。我尝试从TabView中删除GeometryReader,它虽然有效,但还有其他后果。我在第4个选项卡中添加了额外的NavigationView,它也可以工作,但也有其他后果。但是,最适合我的方法是在第4个tav中删除 Spacer()。在添加了命名空间动画的View内,按钮上有一个Spacer()可以将所有视图向上推,然后我将其删除,一切都很好。
答案 5 :(得分:0)
有趣的是,我正在使用 NavigationView 并将其更改为 HSplitView,并且此崩溃开始发生。一旦我回到 NavigationView,它就消失了。
答案 6 :(得分:-2)