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
。然后我在我的排序描述符中使用它来保持秩序。似乎是完成工作的一种钻机工作方式,但如果找不到更好的解决方案,这似乎暂时可以完成工作......
我遇到了 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
。然后我在我的排序描述符中使用它来保持秩序。似乎是完成工作的一种钻机工作方式,但如果找不到更好的解决方案,这似乎暂时可以完成工作......