自从beta 5
of Xcode 11
启动后,我不得不更新代码。你知道该怎么做。然而,有一个奇怪的运行时错误在更改中幸存下来,我无法弄清楚为什么会发生这种情况。
我开始尝试将其限制在我的原始代码中,但令人惊讶的是,它也发生在我设法想出的最简单的测试项目中:带有表格的 TabView。
在运行时更改到另一个选项卡时导致 Xs 模拟器因 SIGABRT 崩溃并出现错误的过程:
“xxxxxx[23089:4642999] 前提条件失败:导入的节点已删除
读取其值之前:90"
如果用户连续点击进入detailview,也不会崩溃;只需运行应用程序并按第二个选项卡即可。
我修改了视图建筑、物体……什么都没有。当将行视图更改为简单文本时,它甚至会崩溃。我还删除了 @Binding 等以排除合并。
如果你们有人看到什么,请告诉我。它只会在 Beta 5 中崩溃,而不会在 Beta 2 中崩溃。
// This file can be used in a new TabView app in Xcode 11 beta 5
// ContentView.swift
import SwiftUI
class TestObject : Identifiable, Hashable{
let identifier: String
init() {
self.identifier = UUID().description
}
static func == (lhs: TestObject, rhs: TestObject) -> Bool {
return lhs.identifier == rhs.identifier
}
func hash(into hasher: inout Hasher) {
hasher.combine(identifier)
}
}
struct RowView: View {
let aTitle: String
var body: some View {
HStack {
Spacer()
Text(aTitle)
Spacer()
}
}
}
struct DetailView: View {
let aObject: TestObject
var body: some View {
VStack {
Spacer()
Text(aObject.identifier)
Spacer()
}
}
}
struct ListNavegableNoBinding: View {
var testObjects: [TestObject]
var body: some View {
NavigationView {
List(testObjects, id: \.self) {
someObject in
NavigationLink(destination: DetailView(aObject: someObject)) {
RowView(aTitle: someObject.identifier)
}
}
}
}
}
struct ContentView: View {
@State private var selection = 0
var tests : [TestObject] = [
TestObject(),
TestObject(),
TestObject()
]
var body: some View {
TabView(selection: $selection){
VStack{
Text("First View")
.font(.title)
ListNavegableNoBinding(testObjects: tests)
}
.tabItem {
VStack {
Image("first")
Text("First")
}
}
.tag(0)
Text("Second View")
.font(.title)
.tabItem {
VStack {
Image("second")
Text("Second")
}
}
.tag(1)
}
}
}
我在 Xcode 11.0 (11A420a) 上仍然遇到这个问题。仅当在动态列表中使用 NavigationLink 时才会发生崩溃。对我来说唯一的解决办法是在列表中使用 ForEach ,如下所示:
List {
ForEach(store.items, id: \.id){ item in
NavigationLink(destination: YourDefinitionView()) {
Text("some text")
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)