Core Data delete all records by name

Basically I am trying to delete all records by name, from my Core Data (specific entity).


Here is my code so far, however it doesn't seem to work:


let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context = delegate.managedObjectContext
       
        let predicate = NSPredicate(format: "name == '\(name)'")
        let request = NSFetchRequest(entityName: "ToMe")
        request.predicate = predicate
       
        ToMeNames = try! context.executeFetchRequest(request) as! [ToMe]
       
        var result:String = String()
        var ResInInt:Int = Int()
       
        var myIndex:Int = Int()
       
        for name in ToMeNames {
           
            if let i = ToMeNames.indexOf(name) {
                let delFrom = ToMeNames[i]
                ToMeNames.removeAtIndex(i)
                context.deleteObject(delFrom)
            } else {
                //do nothing, because it doesn't exist
            }
        }


Basically I call this function from my table view cell when selected, that takes 1 string (cell label name), and I want to delete all records from that name. How?

How much Swift programming have you done? I'm asking because you've got this loop:

  1. for name in ToMeNames {
  2. if let i = ToMeNames.indexOf(name) {
  3. let delFrom = ToMeNames[i]
  4. ToMeNames.removeAtIndex(i)
  5. context.deleteObject(delFrom)
  6. } else {
  7. //do nothing, because it doesn't exist
  8. }
  9. }

that could be more simply written as

  1. for name in ToMeNames {
  2. context.deleteObject(name)
  3. }

and, generally speaking, attempting to modify an array while you're iterating over it tends to cause problems.


Edit: Also,

let predicate = NSPredicate(format: "name == '\(name)'")

is misguided. Don't try to guess how CoreData is going to quote or not quote the value of name. Let CoreData deal with the quoting:

let predicate = NSPredicate(format: "name == %@", name)

NSPredicate performs magic, let the magic work for you.

Core Data delete all records by name
 
 
Q