У меня есть очень интересный cra sh, который происходит только при очень определенных c обстоятельствах. Я уже отправил отчет об ошибке в Apple, но, может быть, кто-то здесь видел подобный cra sh, знает, что происходит, и знает обходной путь?
Минимальный проект, показывающий, что cra sh может можно найти на https://github.com/kevinrenskers/SwiftUICrash, но я также добавил соответствующий код ниже. Проект имеет 3 вида: RootView
, DetailsView
и ListView
. RootView
встраивает либо DetailsView
, либо ListView
.
. Cra sh происходит, когда вы нажимаете кнопку задней навигационной панели в DetailsView
, чтобы переключиться обратно на ListView
. Приложение вылетает с ошибкой «ошибка предварительного условия: атрибут не смог установить начальное значение: 71».
Когда вы используете Button
в центре экрана, чтобы переключиться обратно на ListView
, однако, cra sh НЕ происходит. И когда вы удаляете модификатор .resizable()
из фонового изображения, cra sh также НЕ происходит.
Кроме того, если вы измените Group
на NavigationView
внутри RootView
приложение не создает sh. К сожалению, это не вариант для моего реального приложения.
import SwiftUI
final class AppStore: ObservableObject {
@Published var showingDetails = true
}
struct RootView: View {
@EnvironmentObject private var store: AppStore
var body: some View {
Group {
if store.showingDetails {
DetailsView()
} else {
ListView()
}
}
}
}
struct DetailsView: View {
@EnvironmentObject private var store: AppStore
var body: some View {
NavigationView {
ZStack {
GeometryReader { geo in
Image("bg")
.resizable()
.aspectRatio(contentMode: .fill)
.edgesIgnoringSafeArea(.all)
.frame(width: geo.size.width, height: geo.size.height)
}
Button("List") {
self.store.showingDetails = false // <- this works fine
}
.padding(20)
.background(Color.white)
}
.navigationBarTitle(Text("Details"))
.navigationBarItems(trailing: trailingNavigationBarItem)
}
}
private var trailingNavigationBarItem: some View {
Button("List") {
self.store.showingDetails = false // <- this crashes the app!
}
}
}
struct ListView: View {
@EnvironmentObject private var store: AppStore
var body: some View {
NavigationView {
Button("Load details") {
self.store.showingDetails = true
}
.padding(20)
.background(Color.white)
.navigationBarTitle("List")
}
}
}