【问题标题】:Problems with EnvironmentObject in ModalViewModalView 中的 EnvironmentObject 问题
【发布时间】:2020-01-11 09:06:25
【问题描述】:

我创建了一个简单的列表并想向其中添加用户。我的项目已激活 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:致命错误:未找到 UserStorage 类型的 ObservableObject。 UserStorage 的 View.environmentObject(_:) 作为该视图的祖先可能会丢失。

我曾尝试使用 .sheet 来执行此操作,但它不起作用

【问题讨论】:

    标签: swiftui modal-view


    【解决方案1】:

    Sheet 会创建不同的视图层次结构,因此 .environmentObject 不会注入到默认情况下显示在工作表中的视图中 - 您必须手动执行此操作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多