Swift Core Data - Request with distinct results

Maxim picture Maxim · Jun 26, 2014 · Viewed 9k times · Source

how I can call es request with distinct values in swift?

This is my code:

let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDelegate.managedObjectContext

    let request = NSFetchRequest(entityName: "MedicalData")
    request.propertiesToFetch = NSArray(object: "docID")
    request.returnsObjectsAsFaults = false
    request.returnsDistinctResults = true

    var results:NSArray = context.executeFetchRequest(request, error: nil)

    for data in results {
        var thisData = data as MedicalData
        println(thisData.docID)
    }

I want to get distinct values for "docID" but I get all of the entity :(

Thank your for help!

Answer

Mundi picture Mundi · Jun 26, 2014

You need to set

request.resultType = NSFetchRequestResultType.DictionaryResultType

It returns dictionaries, but the distinct filter should work.

If you do not want to go down that route, filter in memory (also recommended). Do a normal fetch and then

let distinct = NSSet(array: results.valueForKeyPath("docID") as [String])

With Swift 2.0 I prefer

let distinct = NSSet(array: results.map { $0.docID })