Как избежать фатальной ошибки: нет ObservableObject типа ... в SwiftUI?

Я сократил все до этого очень простого примера (ванильный проект SwiftUI, редактируйте только ContentView и одну строку в SceneDelegate). Устанавливает тривиальный объект ObservableObject и пару представлений для экранов. С последним Xcode 11.4 и симулятором вылетает очень легко.

import SwiftUI

// NB In SceneDelegate added: let contentView = ContentView().environmentObject(EO())
class EO: ObservableObject {
    @Published var n = 2
}

struct ContentView: View {
    @EnvironmentObject var eo: EO

    var body: some View {
        NavigationView {
            VStack {
                Text("A: \(eo.n)")
                NavigationLink(destination: ContentViewB()) {
                    Text("Go to B")
                }
            }
        }
    }
}

struct ContentViewB: View {
    @EnvironmentObject var eo: EO
    var body: some View {
        VStack {
            Text("B: \(eo.n)")
        }.onAppear {
            self.eo.n += 1
        }
    }
}

Я делаю что-то неправильно? Или это ошибка SwiftUI? Кажется, что сначала он работает нормально, затем при повторном переходе к дочернему представлению он вылетает. Хотя точное поведение не детерминировано (может произойти сбой при 2-й или 3-й навигации!)

0 ответов

Другие вопросы по тегам