swiftui - ModalView 中的 EnvironmentObject 问题
问题描述
我创建了一个简单的列表并想向其中添加用户。我的项目已激活 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 执行此操作,但它不起作用
解决方案
工作表创建不同的视图层次结构,因此.environmentObject
默认情况下不会注入要在工作表中显示的视图 - 您必须手动进行
}.sheet(isPresented: $presentation, onDismiss: {
self.presentation = false
}) {
newuserView(presentation: self.$presentation, newUser: User())
.environmentObject(self.userStorage)
}
推荐阅读
- java - 从蓝牙录制音频时在耳机上播放实时音频
- logging - 使用 splunk 绘制从 json 字符串字段中提取的键计数表
- python - 尝试连接到 MongoDB TypeError 时出现 Scrapy 错误:__init__() 缺少 2 个必需的位置参数:“mongo_uri”和“mongo_db”
- azure - 使用 AzureClassicRunAsAccount 访问多个订阅中的经典资源
- ios - React-native-reanimated 动画不适用于 ios,适用于 android
- javascript - 我想在没有“弹出”命令的 React.js 中使用 mediainfo.js
- c++ - 我在编写代码时遇到了麻烦
- javascript - 为什么 Promise.then 优先于 process.nextTick?
- javascript - 反应上下文三元运算符一直返回真值
- flutter - 在颤振中增加 ModalBottom 表中的购物车值