SIGABRT:先决条件失败:导入的节点在读取其值之前被删除
SIGABRT: Precondition failure: imported node deleted before its value was read
自从 Xcode 11
的 beta 5
推出以来,我不得不更新代码。你知道该怎么做。但是,有一个奇怪的 运行time 错误在更改后仍然存在,我无法弄清楚为什么会发生。
我开始尝试在我的原始代码中解决它,但令人惊讶的是它也发生在我设法想出的最简单的测试项目中:带有 table.
的 TabView
在 运行 时间切换到另一个选项卡时,使 Xs 模拟器因 SIGABRT 崩溃的程序,错误为:
"xxxxxxx[23089:4642999] precondition failure: imported node deleted
before its value was read: 90"
如果用户连续点击进入detailview,不会崩溃;只需 运行 应用程序,然后按第二个选项卡。
我已经修改了视图建筑、对象……什么都没有。将行视图更改为简单文本时,它甚至会崩溃。我还删除了 @Binding 等以排除 Combine.
如果你们中有人看到了什么,请告诉我。它只在 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 Beta 5在质量上真是倒退了一步。我的项目完全坏了。首先,Shape 崩溃以及选项卡和列表视图的已知问题。
我的以下代码不再有效。它在选择秒选项卡时崩溃:
struct WorkoutList: View {
var workoutCollection: WorkoutCollection
var body: some View {
NavigationView {
List(workoutCollection.workouts) { workout in
NavigationLink(destination: WorkoutDetail(workout: workout)) {
WorkoutRow(workout: workout)
}.accessibility(identifier: "workout")
}.accessibility(identifier: "workoutList").navigationBarTitle(Text("workouts.title"))
}
}
}
用静态列表替换动态列表时,它可以正常工作:
struct WorkoutList: View {
var workoutCollection: WorkoutCollection
var body: some View {
NavigationView {
List() {
NavigationLink(destination: WorkoutDetail(workout: workoutCollection.workout[0])) {
WorkoutRow(workout: workoutCollection.workout[0])
}.accessibility(identifier: "workout")
}.accessibility(identifier: "workoutList").navigationBarTitle(Text("workouts.title"))
}
}
}
我认为我们必须等待 Beta 6。
我有一个 TabView,每个选项卡中都有一个列表,但我的应用现在完全崩溃了。取消引用 List 组件似乎有问题。我们将不得不等待,但我希望尽快发布修补程序。
这里的情况类似。但是,我没有使用 List,而是使用 Form,当我从该选项卡点击到任何其他选项卡时,这似乎会导致此错误,反之亦然。奇怪,奇怪的东西。
使用 Xcode Beta 6(昨天刚刚发布),我的 TabView 再次正常工作。不再有 SIGABRT 错误。所以,是时候升级了!
我在 Xcode 11 GM 上仍然有这个问题...
我有三个选项卡,里面都有列表,每当我在滚动当前视图时更改选项卡,就会发生 SIGBART 崩溃。
我在 Xcode 11.0 (11A420a) 上仍然遇到这个问题。只有在动态列表中使用 NavigationLink 时才会发生崩溃。对我来说唯一的解决方法是在列表中使用 ForEach,如下所示:
List {
ForEach(store.items, id: \.id){ item in
NavigationLink(destination: YourDefinitionView()) {
Text("some text")
}
}
}
自从 Xcode 11
的 beta 5
推出以来,我不得不更新代码。你知道该怎么做。但是,有一个奇怪的 运行time 错误在更改后仍然存在,我无法弄清楚为什么会发生。
我开始尝试在我的原始代码中解决它,但令人惊讶的是它也发生在我设法想出的最简单的测试项目中:带有 table.
的 TabView在 运行 时间切换到另一个选项卡时,使 Xs 模拟器因 SIGABRT 崩溃的程序,错误为:
"xxxxxxx[23089:4642999] precondition failure: imported node deleted before its value was read: 90"
如果用户连续点击进入detailview,不会崩溃;只需 运行 应用程序,然后按第二个选项卡。
我已经修改了视图建筑、对象……什么都没有。将行视图更改为简单文本时,它甚至会崩溃。我还删除了 @Binding 等以排除 Combine.
如果你们中有人看到了什么,请告诉我。它只在 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 Beta 5在质量上真是倒退了一步。我的项目完全坏了。首先,Shape 崩溃以及选项卡和列表视图的已知问题。
我的以下代码不再有效。它在选择秒选项卡时崩溃:
struct WorkoutList: View {
var workoutCollection: WorkoutCollection
var body: some View {
NavigationView {
List(workoutCollection.workouts) { workout in
NavigationLink(destination: WorkoutDetail(workout: workout)) {
WorkoutRow(workout: workout)
}.accessibility(identifier: "workout")
}.accessibility(identifier: "workoutList").navigationBarTitle(Text("workouts.title"))
}
}
}
用静态列表替换动态列表时,它可以正常工作:
struct WorkoutList: View {
var workoutCollection: WorkoutCollection
var body: some View {
NavigationView {
List() {
NavigationLink(destination: WorkoutDetail(workout: workoutCollection.workout[0])) {
WorkoutRow(workout: workoutCollection.workout[0])
}.accessibility(identifier: "workout")
}.accessibility(identifier: "workoutList").navigationBarTitle(Text("workouts.title"))
}
}
}
我认为我们必须等待 Beta 6。
我有一个 TabView,每个选项卡中都有一个列表,但我的应用现在完全崩溃了。取消引用 List 组件似乎有问题。我们将不得不等待,但我希望尽快发布修补程序。
这里的情况类似。但是,我没有使用 List,而是使用 Form,当我从该选项卡点击到任何其他选项卡时,这似乎会导致此错误,反之亦然。奇怪,奇怪的东西。
使用 Xcode Beta 6(昨天刚刚发布),我的 TabView 再次正常工作。不再有 SIGABRT 错误。所以,是时候升级了!
我在 Xcode 11 GM 上仍然有这个问题... 我有三个选项卡,里面都有列表,每当我在滚动当前视图时更改选项卡,就会发生 SIGBART 崩溃。
我在 Xcode 11.0 (11A420a) 上仍然遇到这个问题。只有在动态列表中使用 NavigationLink 时才会发生崩溃。对我来说唯一的解决方法是在列表中使用 ForEach,如下所示:
List {
ForEach(store.items, id: \.id){ item in
NavigationLink(destination: YourDefinitionView()) {
Text("some text")
}
}
}