【问题标题】:Swift 4 - Core Data fetch distinct value for UIPickerViewSwift 4 - 核心数据为 UIPickerView 获取不同的值
【发布时间】:2018-10-04 20:34:27
【问题描述】:

如何从核心数据中获取不同的值以显示在 UIPicker 中?

我有以下代码。它工作正常,但显示重复的内容:

    func CD_Fetch_Value_Database() {
        let context = getcontext()

        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Calculation")
        fetchRequest.predicate = NSPredicate(format: "test= %@", cd_test)

        fetchRequest.returnsObjectsAsFaults = false
        fetchRequest.returnsDistinctResults = true

    do {
        Value_Database = try context.fetch(fetchRequest) as! [Calculation]


    } catch let error as NSError {
        let errorDialog = UIAlertController(title: "Error!", message: "Failed to save! \(error): \(error.userInfo)", preferredStyle: .alert)
        errorDialog.addAction(UIAlertAction(title: "Cancel", style: .cancel))
        present(errorDialog, animated: true)
    }
}

谢谢!

【问题讨论】:

  • 这几乎是同一个问题:stackoverflow.com/questions/34161786/…
  • 您只想在 [Calculation] 上使用 map 来获取值数组(例如标题或其他),然后使用 Set 的便捷 init 创建一个没有重复项的 Set根据定义。
  • 不相关:Swift 的惯用样式是驼峰式。以大写字母(马大小写)开头的函数名称是禁忌,使用下划线(蛇形大小写)也是如此。该函数应重命名为fetchValueFromDatabase()。真的没有必要用“CD”对方法进行伪命名空间
  • @jakehawken 谢谢,我会记住这一点。我还在学习 swift

标签: swift sqlite core-data fetch swift4


【解决方案1】:

您没有提供足够的信息来获得明显的结果。这里的“不同”取决于哪些属性应该具有不同的值。除非您愿意,否则它们不必都是不同的。 returnsDistinctResults 的文档说

仅当为 propertiesToFetch 设置了值时才使用此值。

所以,这是你的下一步。

【讨论】:

  • 好的,我想我必须添加以下行:“fetchRequest.propertiesToFetch = [“name”]”这仍然会导致错误(无法将类型'NSKnownKeysDictionary1'(0x1100ebfe8)的值转换为' MyApp.Calculation' (0x10e4e2600)。)对不起,我是一个快速的初学者......你能给我提供上述示例的示例代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多