我試圖在視圖中呼叫 ViewModel 方法,但收到錯誤訊息Thread 1: Fatal error: No ObservableObject of type AuthViewModel found。AuthViewModel 的 View.environmentObject(_:) 作為此視圖的祖先可能會丟失。我不知道為什么會這樣。
授權視圖模型
import SwiftUI
class AuthViewModel: ObservableObject {
func login() {
print("Hello")
}
}
我的查看檔案
//
// RegistrationView.swift
// TwitterSwiftUI
//
// Created by developer on 11/06/21.
//
import SwiftUI
struct RegistrationView: View {
@State var text = ""
@State var fullName = ""
@State var userName = ""
@State var password = ""
@State var isImagePickerDisplay = false
@State var selectedImage:UIImage?
@Environment(\.presentationMode) var mode: Binding<PresentationMode>
@EnvironmentObject var viewModel: AuthViewModel
var body: some View {
ZStack {
Color(#colorLiteral(red: 0.2203325033, green: 0.6315936446, blue: 0.955042541, alpha: 1))
.ignoresSafeArea()
VStack {
Button(action: {
isImagePickerDisplay = true
}, label: {
if selectedImage != nil {
Image(uiImage: selectedImage!)
.resizable()
.scaledToFit()
.frame(width: 140, height: 140)
.padding(.top, 0)
} else {
Image("plus_photo")
.resizable()
.renderingMode(/*@START_MENU_TOKEN@*/.template/*@END_MENU_TOKEN@*/)
.foregroundColor(.white)
.scaledToFit()
.frame(width: 140, height: 140)
.padding(.top, 0)
}
})
VStack {
CustomTextField(text: $fullName, placeholder: Text("Full name"), icon: Image(systemName: "person"))
.foregroundColor(.white)
.padding()
.background(Color(.init(white: 1, alpha: 0.15)))
.cornerRadius(10)
CustomTextField(text: $fullName, placeholder: Text("Email"), icon: Image(systemName: "envelope"))
.foregroundColor(.white)
.padding()
.background(Color(.init(white: 1, alpha: 0.15)))
.cornerRadius(10)
CustomTextField(text: $userName, placeholder: Text("Username"), icon: Image(systemName: "person"))
.foregroundColor(.white)
.padding()
.background(Color(.init(white: 1, alpha: 0.15)))
.cornerRadius(10)
CustomSecureField(password: $password)
.foregroundColor(.white)
.padding()
.background(Color(.init(white: 1, alpha: 0.15)))
.cornerRadius(10)
Spacer()
.frame(height: 30)
GeometryReader { geometry in
Button(action: {
//viewModel.registerUser(email: "userName", password: "password", userName: "userName", fullName: "fullName", profileImage: selectedImage)
viewModel.login()
}, label: {
Text("Sign up")
})
.frame(width: (geometry.size.width*1), height: 50)
.background(Color.white)
.clipShape(Capsule())
.padding(.vertical)
}
}.padding()
Spacer()
HStack {
Text("Already have account? Login in")
.foregroundColor(.white)
}.onTapGesture {
mode.wrappedValue.dismiss()
}.padding(.bottom, 28)
}
}.sheet(isPresented: self.$isImagePickerDisplay) {
ImagePickerViewHelper(selectedImage: self.$selectedImage, sourceType: .photoLibrary)
}
}
}
uj5u.com熱心網友回復:
錯誤訊息清楚地表明,@EnvironmentObject屬性包裝器要求將關聯物件添加到具有environmentObject()修飾符的視圖層次結構更高級別的環境中。
要直接訪問視圖模型,您必須使用@Stateobject創建觀察類的實體
@Stateobject var viewModel = AuthViewModel()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350497.html
上一篇:il2cpp初始化失敗ios
