簡體   English   中英

SwiftUI 中具有核心數據關系的刪除/清除所有按鈕

[英]Delete/clear all button with Core Data Relationships in SwiftUI

我想在這個“課堂”視圖中有一個“全部清除”按鈕,但我真的不知道如何進行。

首先,這是我的以下設置:

// ClassroomView.swift
import SwiftUI

struct ClassroomView: View {

    @Environment(\.managedObjectContext) private var viewContext
    var classroom: FetchedResults<Classroom>.Element

    var body: some View {
        ScrollView {
            VStack {
                // Some Code Here
                Button("classroom-button-clear", action: { /* What to write here? */ })
                // Some Code Here
                ForEach(classroom.studentArray) { student in
                    StudentView(student: student)
                    Divider()
                }
                // Some Code Here
            }
        }
    }
}

struct StudentView: View {

    var student: FetchedResults<Student>.Element

    var body: some View {
        HStack {
            Text(student.date!)
            Spacer()
            Text(student.name!)
        }
    }
}

extension Classroom {
    public var studentArray: [Student] {
        let set = student as? Set<Student> ?? []
        return set.sorted {
            $0.date! > $1.date!
        }
    }
}
// ClassroomModel.xcdatamodeld

// Entity 1: Classroom (id, date, title, etc...)
     // Relation: student - Student - classroom (To Many)

// Entity 2: Student (id, date, name, etc...)
    // Relation: classroom - Classroom - student (To One)

如果它是一個簡單的刪除按鈕,它在ForEach(classroom.studentArray)中可能是這樣的:

// StudentView.swift
Button("student-button-clear", action: {
    CoreDataManager.shared.deleteStudent(student: student, context: viewContext)
})

// CoreDataManager.swift
func deleteStudent(student: student, context: NSManagedObjectContext) {
    context.delete(student)
    save(context: context)
}

但我不知道如何讓它在ForEach之外工作,並確保每個元素都被刪除,而不僅僅是一個,也許,我也應該將context.delete(student)放在ForEach中,但這感覺不對。

你們是怎么做到的? 謝謝。

您可以在接收Classroom的 CoreDataManager 文件中編寫一個新的CoreDataManager ,並遍歷其所有Student ,刪除其中的每一個。

像這樣:

func deleteStudentsForClassroom(_ classroom: Classroom, context: NSManagedObjectContext) {

    classroom.studentArray.forEach {
        context.delete($0)
    }
    save(context: context)
}

然后,您可以調用此 function 從 CoreData 中刪除教室中的所有學生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM