Hi I put CoreData objects from one to many relationship in ForEach List and when I delete one item all objects from the List disappear. They come back after the view is reload. List{
ForEach(viewModel.allPayments){payment in
Text("(payment.amount)")
}
.onDelete { indexSet in
viewModel.delete(at: indexSet)
}
}
.listStyle(.plain)
final class PaymentViewModel:ObservableObject{
@Published var allPayments:[Payment] = []
@Published var isNavigationLinkActive = false
var loan: Loan
init(loan: Loan) {
self.loan = loan
}
func fetchAllPayments(){
allPayments = PersistanceController.shared.fetchPayments(loan: loan)
}
func delete(at indexSet:IndexSet){
guard let indeRow = indexSet.first else {return}
PersistanceController.shared.delete(object: allPayments[indeRow])
PersistanceController.shared.save()
}
}
import CoreData
struct PersistanceController{
static let shared = PersistanceController()
let container = NSPersistentContainer(name: "Stash")
init(){
container.loadPersistentStores { description, error in
if let error = error {
print("Core Data loading error. (error.localizedDescription)")
}
}
}
var viewContext: NSManagedObjectContext{
return container.viewContext
}
func save(){
do{
try viewContext.save()
}catch{
print("Core Data saving error. (error.localizedDescription)")
}
}
func delete(object:NSManagedObject){
viewContext.delete(object)
save()
}
func fetchPayments(loan:Loan)->[Payment]{
let request:NSFetchRequest = Payment.fetchRequest()
request.predicate = NSPredicate(format: "loan == %@", loan)
request.sortDescriptors = [NSSortDescriptor(keyPath: \Payment.date, ascending: true)]
do{
return try viewContext.fetch(request)
}catch{
print("Unable to fetchPayments")
return []
}
}
}
Is there any way to delete object from Core Data in ForEach List without disappearing all object from the list?