NSFetchedResultsController - 使用一对多关系作为 NSSortDescriptor - Swift

NSFetchedResultsController - Using a To-Many relationship as a NSSortDescriptor - Swift

我遇到了 NSFetchedResultsController sortDescriptor 的问题。我有一对多关系,我想将其用作 sortDescriptor。我的问题是此数据在 NSSet 中。我如何在我的 sortDescriptor 中使用它?当我 运行 它时,我得到了一个:

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'" error.

基本上我有一个 DEVICE 实体和一个 TEST 实体。我想使用 TEST 实体中的最新日期对设备进行排序。鉴于为此使用 Google 时资源不足,我开始怀疑这是否可能?如果不是,最简单的解决方法是什么?

func fetchByFloor(){
    let fetch = NSFetchRequest(entityName: "Device")
    let sort = NSSortDescriptor(key: "estMessageFloor", ascending: false)
    let sortTested = NSSortDescriptor(key: "latestTestDate", ascending: true)

    let sortAddress = NSSortDescriptor(key: "estAddress", ascending: true)
    let sortChanged = NSSortDescriptor(key: "deviceWasEdited", ascending: true)
    fetch.sortDescriptors = [sort,sortTested, sortAddress]
    fetch.fetchBatchSize = 20

    let controller = NSFetchedResultsController(fetchRequest: fetch, managedObjectContext: ad.managedObjectContext, sectionNameKeyPath: "estMessageFloor", cacheName: nil)

    controller.fetchRequest.predicate = devicePredicate
    controller.delegate = self

    fetchedResultsController = controller

    navigationItem.title = "Building: \(currentBuilding)"

}

不是我的问题的真正答案,而是我实施的解决方法,目前有效: 我在 lastestTestDate 的设备实体中添加了另一个属性。每当此设备添加一个 TEST 实体时,我 运行 一个函数将对我的 NSSet 和 return 第一个进行排序。然后我将第一个结果保存为我的 latestTestDate。然后我在我的排序描述符中使用它来保持秩序。似乎是完成工作的一种钻机工作方式,但如果找不到更好的解决方案,这似乎暂时可以完成工作......