问题描述
我有一个 ContentView 和一个 NumericView。 selectedindex 是 ContentView 中的 @State。我想要的是,如果 selectedindex 发生变化,它应该从 CoreData 重置 NumericView 中的答案字段。下面是代码。 “av”包含来自 CoreData 的答案字段的值。
struct NumericEntry: View {
@EnvironmentObject var questionAnswerStore: QuestionAnswerStore
@State var answer: String
var questionIndex: Int
init(questionIndex: Int,av: String) {
self.questionIndex = questionIndex
_answer = State(initialValue: av)
}
var body: some View {
vstack {
TextField("Answer",text: $answer)
.textFieldStyle(CustomTextFieldStyle())
.onChange(of: answer) { newValue in
self.questionAnswerStore.getUserAttemptData(selectedindex: questionIndex).answer = newValue
PersistenceController.shared.saveContext()
}
.keyboardType(.decimalPad)
.padding()
}
}
private struct CustomTextFieldStyle : TextFieldStyle {
public func _body(configuration: TextField<Self._Label>) -> some View {
configuration
.padding(10)
.background(
RoundedRectangle(cornerRadius: 5)
.strokeBorder(Color.secondary.opacity(0.5),linewidth: 1))
}
}
}
struct ContentView: View {
@State var selectedindex: Int = 0
@Observedobject private var questionAnswerStore: QuestionAnswerStore = QuestionAnswerStore.sharedInstance
var body: some View {
NumericEntry(questionIndex: selectedindex,av: self.questionAnswerStore.getUserAttemptData(selectedindex: selectedindex).answer ?? "")
// some code that keeps changing the value of selectedindex
}
}
我在某处读到 _stateVariable = State(initialValue: "abcd") 应该设置 @State stateVariable 的状态。上面代码中的代码
_answer = State(initialValue: av)
执行正常,但到达时
TextField("Answer",text: $answer)
$answer 仍然是“”。
我更喜欢一种解决方案,我什至不必从父组件发送“av”,只需 selectedindex 应该检查 QuestionAnswerStore 以获取“answer”的值。这可以使用 .onAppear 解决,但在我的情况下,NumericView 只出现一次,然后它的父级只是不断更改 selectedindex 值,因此不会再次调用 onAppear。
当然,如果这是不可能的,那么上面使用“av”的出路是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)