如何从Core Data(Swift 4)中的单个字段获得不同的结果

时间:2018-03-07 17:21:26

标签: swift core-data swift4

我试图从" flightNumber"中获取所有值的明确列表。我的" LogLine"中的字段表。但是我尝试的所有内容都会导致获取请求返回完整的航班号列表,并重复。

我已经按照这些问题的答案:

Swift Core Data - Request with distinct results

Swift 3 - NSFetchRequest Distinct Results

但似乎无法让它发挥作用。这是我的代码:

func fetchUniqueFlightNumbers() -> [[String: Int16]]? {
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "LogLine")
    request.resultType = NSFetchRequestResultType.dictionaryResultType
    request.returnsDistinctResults = true
    request.propertiesToFetch = ["flightNumber"]

    do {
        let results = try persistenceContainer.viewContext.fetch(request) as! [[String: Int16]]
        return results
    } catch {
        print("Couldn't read flight numbers from DB \(error)")
        return nil
    }
}

我得到的结果是:

[["flightNumber": 1], ["flightNumber": 1], ["flightNumber": 2], ["flightNumber": 2]]

我想得到结果[1,2],但我得到[1,1,2,2]。

属性&#34; flightNumber&#34;是一个整数16。

我的代码有问题,或者在Swift 4中有什么变化?

编辑:

我意识到,当我的持久存储配置为NSInMemoryStoreType时,我只在测试中看到这种行为。所以这不是一个问题,我只需要重新考虑这部分代码的单元测试。我很好奇为什么我看到这两种商店类型之间的行为差​​异。

1 个答案:

答案 0 :(得分:0)

@ Chris.B我看到您的帖子有些陈旧,但尚未解决。我只是遇到了类似的问题,但使用FethchedResultController后发现了很多东西。您遇到的问题是您没有使用.propertiesToGroupBy,而这正是您希望获得不同结果的属性。它是强制性的NSFetchRequest属性,必须使用它才能获得不同的结果。要获得完整的见解,请查看我对自己问题的回答,这是一种非常详细的分步指南。 Removing duplicate objects from fetch based on object parameter UPDATED Swift 希望对您有所帮助。