ICL1901
ICL1901

Reputation: 7778

How to Delete a managedObject - not a tableView

I am describing some color information in a Core Data diagram. The entity is a color, and the attributes are color components.

I am struggling with two aspects: how to delete an color object from the graph, and secondly, (bonus question?), how could I identify duplicate colors?

In my AppDelegate, I have a core data stack like this:

lazy var persistentContainer: NSPersistentContainer = {
        
        let container = NSPersistentContainer(name: "DD")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                // Replacing this implementation with code to handle the error appropriately.
                
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
    
    // MARK: - Core Data Saving support
    
    func saveContext () {
        print(#function)
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                // Replace this implementation with code to handle the error appropriately.
                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

and where I'm trying to delete the color, I have this:

func deleteColor(_ sender:UIButton) {
        
        let i : Int = (sender.layer.value(forKey: "index")) as! Int
        print(#function, "object to delete: ", i)
        
        let managedContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        
        colors.remove(at: i)
        
        do {
            try managedContext.save()
        } catch let error as NSError  {
            print("Error While Saving Data: \(error.userInfo)")
        }
        
        recentColorCollection!.reloadData()     
    }
    

Variables are:

var colors = [RecentColorEntity]()
    var colorEntity = "RecentColorEntity"

I'm not getting any errors, but the objects are not being deleted. What am I doing wrong?

Upvotes: 0

Views: 44

Answers (1)

Mundi
Mundi

Reputation: 80265

colors.remove(at: i)

just removes the color from your colors array in memory. You need to delete the actual object, like this

context.delete(colorObject)

and save.

Upvotes: 1

Related Questions