NSFetchedResultsController - 使用To-Many关系作为NSSortDescriptor - Swift

时间:2016-06-18 14:07:07

标签: swift core-data one-to-many nssortdescriptor nsset

我遇到了NSFetchedResultsController sortDescriptor的问题。我有一个To-Many关系,我想用作sortDescriptor。我的问题是这些数据是NSSet。我怎样才能在sortDescriptor中使用它?当我跑它时,我得到了:

  

"因未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' to-many key不允许在此处'"   错误。

基本上我有一个DEVICE实体和一个TEST实体。我想使用TEST实体中的最新日期对设备进行排序。从使用谷歌这方面缺乏资源来判断,我开始怀疑它是否可能?如果不是最简单的解决方法是什么?

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)"

}

1 个答案:

答案 0 :(得分:1)

对我的问题不是一个真实的答案,但我实施的一项工作现在正在运作: 我在我的DEVICE实体中为NSSet添加了另一个属性。每当此设备添加TEST实体时,我运行一个函数来对latestTestDate进行排序并返回第一个。然后我将第一个结果保存为{{1}}。然后我在我的排序描述符中使用它来保持秩序。似乎可能是一种完成任务的钻井工作方式,但是如果找不到更好的解决方案,那么现在这似乎可以完成......