我正在Xcode 11上构建一个SwiftUI应用程序,但每当我切换到应用程序中的某个特定选项卡时,它就会立即终止。问题是,它总是指向Application Delegate文件,我认为这不是真正的问题。我也在控制台precondition failure: invalid input index: 2中得到这个错误,仅此而已,没有更多关于这个错误来自哪个文件、数组或函数的细节。
Application Delegate
precondition failure: invalid input index: 2
在Xcode中有什么方法可以隔离导致这个问题的原因吗?
x7yiwoj41#
我有一个TabView,其中包含一个使用列表的视图。切换选项卡时,我的应用程序崩溃,并出现类似的错误:“前提条件失败:属性无法设置初始值:99”此崩溃:
var body: some View { TabView { ListView() .tabItem { Image(systemName: "list.dash") Text("List") }
将列表视图 Package 在NavigationView中修复了崩溃。我在Caleb Wells的“Swift Live - 007 SwiftUI TabView && List”上看到了NavigationView的这种用法。https://youtu.be/v1A1H1cQowIhttps://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") }
lyfkaqu12#
我也碰到过这个。我只是想分享一下,以防有人觉得有用。
简短回答
将我的视图 Package 成NavigationView会引发错误。使用.navigationViewStyle(StackNavigationViewStyle())解决了我的问题。
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,前提条件失败将不会发生。我在NavigationView上使用.navigationViewStyle(StackNavigationViewStyle()),这解决了我的问题。
MyView
GeometryReader
3gtaxfhh3#
我在模拟器上遇到过这个运行时错误。在我的例子中,问题是NavigationBarItems,我在一个错误的块中使用了它,如下所示:
NavigationBarItems
NavigationView { Group { if something { ScrollView { ... }//ScrollView } else { ... } }//group .navigationBarItems(trailing: self.favoriteItem) // CRASH** }
我移动了NavigationBarItems修改器并将其赋予ScrollView:
ScrollView
NavigationView { Group { if something { ScrollView { ... }//ScrollView .navigationBarItems(trailing: self.favoriteItem) // NO CRASH** } else { ... } }//group }
41zrol4v4#
我认为Apple https://developer.apple.com/forums/thread/133958中存在一个与GeometryReader崩溃有关的错误,在我的案例中,我遇到了一个与tabBar类似的问题,并显示消息“前提条件失败:无效输入索引:当尝试将GeometryReader用作let w = geo.size.width时为2”我试过在它周围使用守卫语句......不起作用--也许我不喜欢守卫。
let w = geo.size.width
vcirk6k65#
在我的例子中,我使用了一个已经在NavigationView中的TabView。在我的第4个选项卡中,我使用了一个命名空间动画,添加命名空间动画后,它崩溃了。我尝试从TabView中删除GeometryReader,它工作正常,但有其他后果。我在第4个选项卡中添加了额外的NavigationView,它也起作用了,但也有其他后果。但对我来说最合适的方法是移除一个**间隔物()**在第4个tav中。在我添加命名空间动画的视图中,按钮中有一个Spacer(),它将所有视图向上推,我删除了它,现在一切都很好。
gijlo24d6#
有趣的是,我正在使用NavigationView,并将其更改为HSplitView,然后这个崩溃开始发生。我一回到NavigationView,这个问题就消失了。
lyfkaqu17#
我也遇到了同样的问题,我只是从Identifiable中删除了随机ID(UUID),并修复了崩溃
7条答案
按热度按时间x7yiwoj41#
我有一个TabView,其中包含一个使用列表的视图。切换选项卡时,我的应用程序崩溃,并出现类似的错误:“前提条件失败:属性无法设置初始值:99”此崩溃:
将列表视图 Package 在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
这起了作用:
lyfkaqu12#
我也碰到过这个。我只是想分享一下,以防有人觉得有用。
简短回答
将我的视图 Package 成
NavigationView
会引发错误。使用.navigationViewStyle(StackNavigationViewStyle())
解决了我的问题。详细答案
我有过这样的经历:
然后,
MyView
内部也有一个GeometryReader
。所描述的代码将失败。如果删除NavigationView
,前提条件失败将不会发生。我在
NavigationView
上使用.navigationViewStyle(StackNavigationViewStyle())
,这解决了我的问题。3gtaxfhh3#
我在模拟器上遇到过这个运行时错误。在我的例子中,问题是
NavigationBarItems
,我在一个错误的块中使用了它,如下所示:我移动了
NavigationBarItems
修改器并将其赋予ScrollView
:41zrol4v4#
我认为Apple https://developer.apple.com/forums/thread/133958中存在一个与GeometryReader崩溃有关的错误,在我的案例中,我遇到了一个与tabBar类似的问题,并显示消息“前提条件失败:无效输入索引:当尝试将GeometryReader用作
let w = geo.size.width
时为2”我试过在它周围使用守卫语句......不起作用--也许我不喜欢守卫。
vcirk6k65#
在我的例子中,我使用了一个已经在NavigationView中的TabView。在我的第4个选项卡中,我使用了一个命名空间动画,添加命名空间动画后,它崩溃了。我尝试从TabView中删除GeometryReader,它工作正常,但有其他后果。我在第4个选项卡中添加了额外的NavigationView,它也起作用了,但也有其他后果。但对我来说最合适的方法是移除一个**间隔物()**在第4个tav中。在我添加命名空间动画的视图中,按钮中有一个Spacer(),它将所有视图向上推,我删除了它,现在一切都很好。
gijlo24d6#
有趣的是,我正在使用NavigationView,并将其更改为HSplitView,然后这个崩溃开始发生。我一回到NavigationView,这个问题就消失了。
lyfkaqu17#
我也遇到了同样的问题,我只是从Identifiable中删除了随机ID(UUID),并修复了崩溃