어떻게 삭제하는 항목에서 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(_:) 는 방법 개체. 변경되는 것을 통해 전달되 h @FetchRequest 체,자동으로 귀하의 SwiftUI 볼 것입 업데이트를 표시하지 않은 컬렉션 이제는 삭제된 개체입니다.

그래서 당신의 버튼 동작이 된다:

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

참고하는 동안 당신은 효과를 볼 바로 삭제 될 때까지 메모리에 당신은 전화 save 에서 관리되는 개체 context.

내 CoreData 앱들을 변경은 별도로,예를 들어 앱을 이동하는 것입니다. 하지만 당신이 원하는 경우를 트리거장에 즉시 개체를 제거하는 간단하다:

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

NB:에 대한 문서 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ý
..................................................................................................................