ยังไงจะลบการรายการใน forEach วกับเป็นลบ btn สำหรับแต่ละของมัน ฉันใช้ swiftUI กับแกนกลางข้อมูล

0

คำถาม

นี่คือรหัสถ้าคุณไม่เข้าใจ

struct cartView: View {
        @Environment(\.managedObjectContext) private var viewContext
    
        @FetchRequest(
            sortDescriptors: [], animation: .default) private var products: FetchedResults<Prod>
        
        let columns = [GridItem(.flexible()), GridItem(.flexible())]
        @State var indx = 0
    
        var body: some View {
            NavigationView {
                ScrollView {
                    VStack {
                        LazyVGrid(columns: columns) {
                            ForEach(products, id: \.self) {prod in
                                let prodItems = Product(name: prod.name ?? "Undefined", price: prod.price ?? "Undefined", type: "type", brand: prod.brand ?? "Undefined", images: [prod.image!,""])
                                
                                    ZStack {
                                    Cells(product: prodItems)
                                    // I want the button below delete the item of the 
                                    // button pressed with the function below
                                    Button(action: {}) {
                                        Image(systemName: "xmark.bin.circle")
                                            .resizable()
                                            .frame(width: 30, height: 30)
                                            .foregroundColor(.red)
                                            .background(.black)
                                            .clipShape(RoundedRectangle(cornerRadius: 20))
                                            .offset(x: 60, y: 45)
                                    }
                                }
                            }
                        }
                    }
                }
                .navigationTitle("Cart")
            }
        }
        
        private func deleteItems(offsets: IndexSet) {
            withAnimation {
                offsets.map { products[$0] }.forEach(viewContext.delete)
    
                do {
                    try viewContext.save()
                } catch {
                    let nsError = error as NSError
                    fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
                }
            }
        }
}

ดังนั้นคำถามที่อยู่นี่คือปุ่มนั่นอยู่ใน forEach วแบบอักษรเพื่อทำการลบรายการนั้นผู้ใช้กดปุ่มและฉันรู้ว่าต้องทำแต่สิ่งที่ฉันไม่รู้ก็คือวิธีที่จะดัชนีของรายการและมองผ่านมันฟังก์ชัน.

core-data swift swiftui
2021-11-14 09:37:14
1

คำตอบที่ดีที่สุด

0

คุณไม่ที่จริงต้องการดัชนีถ้าคุณ issuing รลบ instruction จากภายในของคุณฐาของคุณ NSManagedObjectContext ตัวอย่างเช่นมี delete(_:) วิธีการที่ต้องใช้ของตัวมันเอง เปลี่ยนแปลงนั่นจะ propagate ผ่านของคุณ @FetchRequest วัตถุอัตโนมัติของคุณ SwiftUI องมุมมองจะปรับปรุงการแสดงชุดสะสมโดยไม่ต้องตอนนี้-กลบวัตถุ.

ดังนั้นของคุณปุ่มกลายเป็นการกระทำ:

Button(action: {
  viewContext.delete(prod)
}) {
  Image(systemName: ...)
  // etc.
}

โปรดจำไว้ว่าในขณะที่คุณจะเห็นผลกระทบที่ได้กลับบ้านทันทีที่เครื่องมือลบจะอยู่ในความทรงจำจนกว่าคุณเรียก save ที่ถูกจัดการสิ่งแวดล้อมต่างๆ

ในของฉัน CoreData apps ฉันมีแนวโน้มที่จะบันทึกของฉันเปลี่ยนแปลงต่างหากตัวอย่างเช่นตอนที่แอพฯเป็นเรื่องต้องเข้าไปในเบื้องหลัง แต่ถ้าคุณอยากจะกระตุ้นผู้ช่วยทันทีที่วัตถุเป็นผ่าออก,นั่นคือตรงไปตรงมาพอแล้ว:

Button(action: {
  viewContext.delete(prod)
  try? viewContext.save()
}) {
  Image(systemName: ...)
  // etc.
}

NB ที่สำหรับเอกสารคู่มือ@info:shell NSManagedObjectContext.save() บอกว่าคุณควรจะตรวจดู hasChanges ทรัพย์สินก่อนที่พวกเขาพยายามที่จะบันทึกแต่อย่างที่คุณทำให้การเปลี่ยนเส้นด้านบนนั่นไม่จำเป็นต้องอยู่ในนี้เฉพาะตัวอย่าง

2021-11-14 16:37:10

ขอบคุณมาก,มันได้ผล u จริงๆช่วยฉัน!
Fovu

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................