Here's a copy/paste example of doing the equivalent of a SQL MAX() function. I know, I know "CoreData is an object graph". It's in a project where I had to keep track of the sequence in which entities were added. As far as I know, there's no equivalent of AutoIncrement in CoreData.
func nextSequence(moc: NSManagedObjectContext) -> Int { let quantityExpression = NSExpressionDescription() quantityExpression.name = "max.sequence" quantityExpression.expression = NSExpression(format: "@max.sequence") quantityExpression.expressionResultType = .Integer32AttributeType let predicate = NSPredicate(format: "form == %@", self.form) let request = NSFetchRequest() request.entity = NSEntityDescription.entityForName("UMAQuestion", inManagedObjectContext: moc) // request.propertiesToGroupBy = ["sequence"] request.resultType = NSFetchRequestResultType.DictionaryResultType request.propertiesToFetch = [quantityExpression] request.predicate = predicate var maxSequence = 0 do { let results = try moc.executeFetchRequest(request) as? [[String:AnyObject]] if let maxSequenceDict = results!.first { if let maxSequenceResult: AnyObject = maxSequenceDict["max.sequence"] { maxSequence = maxSequenceResult as! Int } else { fatalError("Couldn't find max.sequence in dict") } } else { fatalError("Didn't get first result") } } catch let error as NSError { fatalError("Error fetching max sequence: \(error)") } return maxSequence + 1 }
Paste this in your model file. Adjust the predicate or uncomment and adjust the propertiesToGroupBy.