Проблемы с EnvironmentObject в ModalView - PullRequest
0 голосов
/ 11 января 2020

Я создал простой список и хочу добавить в него пользователей. В моем проекте активирована CoreDate, и я добавил следующий код в SceneDelegate:

    let userStorage = UserStorage()
    let contentView = ContentView().environment(\.managedObjectContext, context).environmentObject(userStorage)

Код ContentView:

import SwiftUI

struct User: Identifiable {
    var id = UUID()
    var firstName = ""
    var lastName = ""
}

class UserStorage: ObservableObject {
    @Published var users = [User]()
}

struct ContentView: View {

    @State private var presentation = false
    @EnvironmentObject var userStorage: UserStorage

    var body: some View {

        VStack {
            Button(action: {
                self.presentation = true
            }) {
                Text("New User")
            }.sheet(isPresented: $presentation, onDismiss: {
                self.presentation = false
            }) {
                newuserView(presentation: self.$presentation, newUser: User())
            }
            List(userStorage.users) { singleUser in
                VStack {
                    Text(singleUser.firstName)
                    Text(singleUser.lastName)
                }
            }
        }
    }
}

struct newuserView : View {
    @Binding var presentation: Bool
    @State var newUser: User
    @EnvironmentObject var userStarage: UserStorage

    var body: some View {
        VStack {
            TextField("Put in first name please", text:$newUser.firstName)

            TextField("Put in last name please", text:$newUser.lastName)

            Button(action: {
                self.userStarage.users.append(self.newUser)
                self.presentation = false
            }) {
                Text("Add new User")
            }disabled(newUser.lastName.isEmpty || newUser.firstName.isEmpty)
        }.padding(.horizontal)
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Когда я Запустив мой проект и хочу добавить пользователя, я получаю следующую ошибку:

Тема 1: Неустранимая ошибка: Обнаружен объект ObservableObject типа UserStorage. View.environmentObject (_ :) для UserStorage может отсутствовать как предок этого представления.

Я пытался сделать это с .sheet, но он не работает

1 Ответ

0 голосов
/ 11 января 2020

Лист создает другую иерархию представлений, поэтому .environmentObject не внедряется в представление, чтобы отображаться на листе по умолчанию - вы должны сделать это вручную

}.sheet(isPresented: $presentation, onDismiss: {
    self.presentation = false
}) {
    newuserView(presentation: self.$presentation, newUser: User())
        .environmentObject(self.userStorage)
}
...