swift - 如何从核心数据中的单个字段获得不同的结果(Swift 4)

标签 swift core-data swift4

我正在尝试从我的“LogLine”表中的“flightNumber”字段中获取所有值的不同列表。但是我尝试过的所有操作都导致获取请求返回完整的航类号列表,其中有重复项。

我遵循了这些问题的答案:

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]。

属性“flightNumber”是一个整数 16。

是我的代码有什么问题,还是 Swift 4 有什么变化?

编辑:

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

最佳答案

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

关于swift - 如何从核心数据中的单个字段获得不同的结果(Swift 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49157779/

相关文章:

swift - Xcode gRPC-C++ 编译错误的原因是什么?

ios - Get-only 属性保留在内存中

ios - 本地通知不在 swift 4 中调用 didReceiveRemoteNotifications

ios - 如何在 Swift 的函数内部调用函数

ios - 如何使用 cocoa pod 的 Storyboard引用?

ios - 如何一次将多个关系保存到 CoreData?

ios - 从 CoreData 上的不同属性获取前 1 个

ios - RestKit: 'NSInternalInconsistencyException',原因: 'Unable to perform mapping: No ` managedObjectContext`已分配

ios - 如何从braintree payments中获取卡号?

xcode - 需要对 : Y position or height, Scrollview 进行约束,包括 Imageview