0

I have a fetch request, and a foreach loop listing out the items. How can I write a function to delete all items in this set?

@FetchRequest(
    entity: TaskItem.entity(),
    sortDescriptors: [NSSortDescriptor(keyPath: \TaskItem.completedDate, ascending: false)],
    predicate: NSPredicate(format: "isComplete == %@", NSNumber(value: true))
) var taskItems: FetchedResults<TaskItem>
ForEach(taskItems, id: \.self) { item in
    Text("\(item.title)")
}

I have this function to delete individual items. Can this code be tweaked and used to delete all items?

func deleteTask(indexSet: IndexSet) {
    let source = indexSet.first!
    let taskItem = taskItems[source]
    managedObjectContext.delete(taskItem)
    saveTasks()
}
  • What _all_ elements? All in the set or all objects that you have fetched? Either way you should look at [this question](https://stackoverflow.com/questions/14560900/coredata-delete-multiple-objects) – Joakim Danielson Jul 06 '20 at 20:55

2 Answers2

2

Try the following:

func deleteAll() {
    // for each taskItem... delete
    taskItems.forEach(managedObjectContext.delete)
    saveTasks()
}

Assuming saveTasks saves the managedObjectContext object.

pawello2222
  • 46,897
  • 22
  • 145
  • 209
2

Loop over taskItems and delete taskItem one-by-one:

func deleteAllTasks() {
    for taskItem in taskItems {
        managedObjectContext.delete(taskItem)
    }
    saveTasks()
}
Frankenstein
  • 15,732
  • 4
  • 22
  • 47