SwiftUI表崩溃,偶尔有关于修改状态的警告



我有一个SwiftUI按钮,当点击时,sheet显示确认模式。当在模态中点击按钮进行确认时,我将其保存到Core Data。

我得到了一个或所有令人讨厌的结果:

  • 表单只是挂起并且变得无响应。
  • 我得到一个警告:"在视图更新期间修改状态,这将导致未定义的行为">
  • 我崩溃了。

显然,我正在修改状态变成我正在删除一个东西,但我不清楚如何正确地做这件事。

这是我点击删除的视图:

struct MyView: View{
@State var showDeleteModal = false
var body: some View{
Button("Delete"){
showDeleteModal.toggle()
}
.sheet(isPresented: self.$showDeleteModal) {
ModalView(confirm: {
self.showDeleteModal.toggle()
//Save the object in my Core Data stuff
model.saveThing(thing: thing)
})
}
}
}

这是我的模态,它有一个回调函数来确认删除:

struct ModalView: View {
var confirm:() -> Void

var body: some View { 
Button("Confirm"){
confirm()
}
}
}

我如何隐藏模态并使保存(从屏幕上删除视图)而不干扰SwiftUI的状态?

我建议在onDismiss中使用sheet(isPresented:onDismiss:content:)并调用model.saveThing:

struct MyView: View {
@State var showDeleteModal = false
var body: some View {
Button("Delete") {
showDeleteModal.toggle()
}
.sheet(isPresented: self.$showDeleteModal, onDismiss: onDismiss) {
ModalView()
}
}

func onDismiss() {
model.saveThing(thing: thing)
}
}

那么你可以在不知道父状态的情况下解散表单-只需使用@Environment(.presentationMode):

struct ModalView: View {
@Environment(.presentationMode) private var presentationMode
var body: some View {
Button("Confirm") {
presentationMode.wrappedValue.dismiss()
}
}
}

注意:由于工作表可以在不与确认按钮交互的情况下关闭,您可以使用另一个@State变量来检测它是如何关闭的-参见:

  • SwiftUI:如何在工作表关闭后显示警报?

相关内容

  • 没有找到相关文章

最新更新