You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4:如何从Core Data获取去重值显示在UIPickerView中?

解决Core Data获取去重值并显示在UIPicker的问题

我来帮你搞定这个问题——你当前代码里的returnsDistinctResults = true没起作用,是因为默认的Fetch Request是获取整个Calculation实体对象,而Core Data判断"重复"的依据是实体实例是否相同,不是某个属性的值是否重复。哪怕两个实体的目标属性值一样,它们也是不同的实例,所以去重逻辑不会生效。

下面是修改后的完整方案,你可以直接适配到你的代码里:

步骤说明

  1. 明确你要去重的目标属性(比如假设是value字段,你需要替换成自己的属性名)
  2. 通过NSExpressionDescription指定只获取这个属性,让Core Data针对属性值做去重
  3. 调整Fetch Request的返回类型,以便提取去重后的属性值

修改后的代码

func CD_Fetch_Value_Database() { 
    let context = getcontext() 
    // 把泛型改成NSDictionary,因为我们要获取字典形式的结果
    let fetchRequest = NSFetchRequest<NSDictionary>(entityName: "Calculation") 
    fetchRequest.predicate = NSPredicate(format: "test= %@", cd_test) 
    fetchRequest.returnsObjectsAsFaults = false 
    fetchRequest.returnsDistinctResults = true 

    // 配置要获取的去重属性
    let distinctProperty = NSExpressionDescription()
    distinctProperty.name = "distinctValue" // 自定义结果字典中的key
    // 替换成你实际要去重的属性名,比如"yourTargetProperty"
    distinctProperty.expression = NSExpression(forKeyPath: "yourTargetProperty") 
    // 根据你的属性类型调整,比如字符串用.stringAttributeType,数字用.int32AttributeType
    distinctProperty.expressionResultType = .stringAttributeType 

    fetchRequest.propertiesToFetch = [distinctProperty]
    fetchRequest.resultType = .dictionaryResultType // 指定返回字典类型

    do { 
        let fetchedResults = try context.fetch(fetchRequest) 
        // 提取去重后的属性值到数组,类型和你设置的保持一致
        Value_Database = fetchedResults.compactMap { $0["distinctValue"] as? String }
        // 刷新UIPicker的数据源
        yourPickerView.reloadAllComponents()
    } catch let error as NSError { 
        print("获取去重数据失败: \(error.localizedDescription), \(error.userInfo)") 
    }
}

关键注意点

  • 替换代码中的yourTargetProperty为你实际需要去重的属性名称(比如你要显示在Picker里的那个字段)
  • 根据属性类型调整expressionResultType和数组转换的类型:如果是整数,就把.stringAttributeType改成.int32AttributeType,同时as? String改成as? Int
  • 确保Value_Database的类型和你提取的属性类型一致,这样才能作为UIPicker的数据源正常使用

内容的提问来源于stack exchange,提问作者JosWico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:29:38