我正在做一个核心数据实践项目。问题是当用户改变主意编辑旧订单时,颜色属性不显示当前保存的颜色,当用户从选择中更改新颜色时,选择器不会隐藏,新颜色也不会更新颜色属性。请帮帮我,非常感谢
内容视图
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var orderDetails: FetchedResults<OrderDetails>
@State private var isShowingOrder = false
var body: some View {
NavigationView {
List{
ForEach(orderDetails) { detail in
NavigationLink{
DetailView(orderDetail: detail)
} label: {
VStack(alignment: .leading){
HStack{
Text(detail.name ?? "Unknown")
}
Text(detail.color ?? "Unknown")
}
}
}
.onDelete(perform: deleteOrders)
}
.navigationTitle("Order List")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
EditButton()
}
ToolbarItem(placement: .navigationBarTrailing) {
Button{
isShowingOrder.toggle()
} label: {
Label("", systemImage: "plus")
}
}
}
.sheet(isPresented: $isShowingOrder) {
AddOrderView()
}
}
}
func deleteOrders(at offsets: IndexSet) {
for offset in offsets {
let order = orderDetails[offset]
moc.delete(order)
}
try? moc.save()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
添加订单视图
import SwiftUI
struct AddOrderView: View {
@Environment(\.managedObjectContext) var moc
@Environment(\.dismiss) var dismiss
@State private var name = ""
@State private var amount = 0
@State private var color = ""
@State private var comments = ""
let colors = ["red", "blue", "green", "white", "black", "orange"]
var body: some View {
NavigationView{
Form{
Section {
TextField("Name of Product", text: $name)
}
Section {
Stepper("Order Amount: \(amount)", value: $amount, in: 0...100)
}
Section {
Picker("Color", selection: $color) {
ForEach(colors, id: \.self){
Text($0)
}
}
}
Section {
TextField("Comments", text: $comments)
} header: {
Text("Please write your special request here:")
}
}
.navigationTitle("Add new order")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button("Save") {
let newOrder = OrderDetails(context: moc)
newOrder.name = name
newOrder.amount = Int16(amount)
newOrder.color = color
newOrder.comments = comments
try? moc.save()
dismiss()
}
}
}
}
}
}
struct AddOrderView_Previews: PreviewProvider {
static var previews: some View {
AddOrderView()
}
}
详细视图
import SwiftUI
struct DetailView: View {
let orderDetail: OrderDetails
@Environment(\.managedObjectContext) var moc
@Environment(\.dismiss) var dismiss
@State private var isEditingAgain = false
var body: some View {
ScrollView{
VStack{
Text("Order Amount: \(orderDetail.amount)")
Text("Color: \(orderDetail.color ?? "Unknown")")
Text("Comments: \(orderDetail.comments ?? "Unknown")")
}
}
.navigationTitle(orderDetail.name ?? "Unknown")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button {
isEditingAgain = true
} label: {
Label("", systemImage: "square.and.pencil")
}
}
}
.sheet(isPresented: $isEditingAgain) {
EditOrderView(currentDetails: orderDetail)
}
}
}
编辑订单视图
import SwiftUI
struct EditOrderView: View {
@Environment(\.managedObjectContext) var moc
@Environment(\.dismiss) var dismiss
@ObservedObject var currentDetails: OrderDetails
let editColors = ["red", "blue", "green", "white", "black", "orange"]
var body: some View {
NavigationView{
Form{
Section {
TextField("Name of Product", text: $currentDetails.name ?? "")
}
Section {
Stepper("Order Amount: \(currentDetails.amount)", value: $currentDetails.amount, in: 0...100)
}
Section {
Picker("Color", selection: $currentDetails.color) {
ForEach(editColors, id: \.self){
Text($0)
}
}
}
Section {
TextField("Comments", text: $currentDetails.comments ?? "")
} header: {
Text("Please write your special request here:")
}
}
.navigationTitle("Edit Order")
.navigationBarTitleDisplayMode(.inline)
.toolbar{
ToolbarItem(placement: .navigationBarTrailing){
Button("Save") {
try? self.moc.save()
dismiss()
}
}
}
}
}
}