कैसे करने के लिए एक आइटम को हटाने में एक 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

आप वास्तव में नहीं की जरूरत है, सूचकांक यदि आप कर रहे हैं जारी करने के लिए हटाने के निर्देश से अपने पाश के भीतर, के रूप में अपने NSManagedObjectContext उदाहरण है delete(_:) विधि लेता है कि वस्तु ही है । कि परिवर्तन के माध्यम से प्रचार करेंगे अपने @FetchRequest वस्तु स्वचालित रूप से, अपने SwiftUI दृश्य दिखाने के लिए अद्यतन करेगा संग्रह के बिना अब-हटाए गए ऑब्जेक्ट.

तो अपने बटन कार्रवाई हो जाता है:

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

ध्यान दें कि जब आप देखेंगे प्रभाव सीधे दूर, विलोपन केवल हो जाएगा जब तक स्मृति में आप कॉल save पर प्रबंधित ऑब्जेक्ट संदर्भ.

मेरे CoreData क्षुधा, मैं करने के लिए करते हैं बचाने के लिए अपने परिवर्तनों को अलग से, उदाहरण के लिए जब एप्लिकेशन के बारे में जाने के लिए पृष्ठभूमि में. लेकिन अगर आप चाहते हैं ट्रिगर करने के लिए एक बचाने के लिए तुरंत वस्तु निकाल दिया जाता है, यह काफी सरल:

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

नायब: प्रलेखन के लिए NSManagedObjectContext.save() कहते हैं कि आप की जाँच करनी चाहिए hasChanges से पहले संपत्ति को बचाने के प्रयास के रूप में, लेकिन तुम सिर्फ एक परिवर्तन किया है में लाइन के ऊपर है कि, आवश्यक नहीं है में इस विशेष उदाहरण है ।

2021-11-14 16:37:10

बहुत बहुत धन्यवाद, यह काम करता है, यू वास्तव में मेरी मदद की!
Fovu

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................