I have a function, where I can add the Profile to the favourite list (which saves through Core Data) and when I want to mark it as Not Favourite, it should delete from the Core data and also from the TableList View (Favourite View Controller).
The code what I have so far, deletes all the records from the list instead deleting the specific record.
Please Find the code Below:-
@IBAction func saveFav(_ sender: UIButton) {
let propertyToCheck = sender.currentTitle!
var proID = saved_id
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let task = FavProfile(context: context)
switch propertyToCheck {
case "Add to Favourite":
// Link Task & Context
task.busName = bussinessName
task.profileID = Int32(id!)!
print ("saved id is: - \(task.profileID)")
print ("saved profile name is: - \(task.busName)")
fav_remove_fav_button_label.setTitle("Remove From Favourite", for: .normal)
// Save the data to coredata
(UIApplication.shared.delegate as! AppDelegate).saveContext()
let _ = navigationController?.popViewController(animated: true)
let alert = UIAlertController(title: "Alert", message: "Added to your Favourite list", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
case "Remove from Favourite":
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FavProfile")
let moc = getContext()
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [FavProfile]
for object in resultData {
moc.delete(object)
}
do {
try moc.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
let alert = UIAlertController(title: "Alert", message: "Removed from your Favourite list", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
// self.favtable.tableView.reloadData()
default: break
}
}
I dont know what I need to fix here that only deletes the specific record.
Thanks for the time and effort.
Screen 1, when i mark the profile as favourite:
Screen 2 when i mark same profile as not favourite :
screen 3, when i restart the app again:
I tried to mark the 2nd profile as not favourite, it does not update the tableview. and when i restart the app, it shows "Label"
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FavProfile")
let predicate = NSPredicate(format: "profileID == %@", id as CVarArg)
fetchRequest.predicate = predicate
let moc = getContext()
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [FavProfile]
for object in resultData {
moc.delete(object)
}
do {
try moc.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
use predicate for profileID.