Search code examples
objective-csqlitecore-dataswiftnsfetchrequest

Swift Core Data - Request with distinct results


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!


Solution

  • 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 })