Swift核心数据 - 请求具有不同的结果

时间:2014-06-26 14:15:03

标签: objective-c sqlite core-data swift nsfetchrequest

如何在swift中使用不同的值调用es请求?

这是我的代码:

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

我想获得“docID”的不同值,但我获得了所有实体:(

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

您需要设置

request.resultType = NSFetchRequestResultType.DictionaryResultType

它返回字典,但不同的过滤器应该有效。

如果你不想沿着那条路走下去,请在内存中过滤(也推荐)。做正常的提取然后

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

使用Swift 2.0我更喜欢

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

答案 1 :(得分:4)

如前所述,关键是使用

fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType

fetchRequest.propertiesToFetch = ["propertyName"]

两者都是独立工作所必需的

fetchRequest.returnsDistinctResults = true

下一步是将结果作为Swift Dictionaries处理并返回所需的值。

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let managedContext = appDelegate.managedObjectContext!
    //FetchRequest
    let fetchRequest = NSFetchRequest(entityName: "Purchase")
    fetchRequest.propertiesToFetch = ["year"]
    fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType
    fetchRequest.returnsDistinctResults = true
    //Fetch
    var error: NSError?
    if let results = managedContext.executeFetchRequest(fetchRequest, error: &error)  {
        var stringResultsArray: [String] = []
        for var i = 0; i < results.count; i++ {
            if let dic = (results[i] as? [String : String]){
                if let yearString = dic["year"]?{
                    stringResultsArray.append(yearString)
                }
            }
        }
        return stringResultsArray
    }else {
        println("fetch failed: \(error?.localizedDescription)")
    }
    return []

答案 2 :(得分:-2)

NSPredicate将允许您搜索特定值并仅从核心数据中检索所需的数据:

colorname<-c("Pink", "Red", "Red", "Purple", "Green", "Blue", "Blue", "Blue", "Blue", "Yellow","Yellow","Yellow","Yellow","Yellow","Orange","Black")

在此示例中,我们只希望返回与“docID”列中的字符串匹配的特定值,但NSPredicate是在代码中构建类似SQL的查询的一种方便方法,并且非常灵活。