我想对 NSSet 中的获取请求返回的对象进行排序或过滤(从一对多关系)。这里的 routineSplitsRel 是 RoutineSplits 的 NSSet,应该在“displayOrder”中返回。应用 sortdescriptor1 会返回一条错误消息:
'to-many key not allowed here'
class Routines: NSManagedObject {
@NSManaged var id: NSNumber
@NSManaged var isdeleted: NSNumber
@NSManaged var name: String
@NSManaged var repetitions: String
@NSManaged var uid: String
@NSManaged var updatedat: NSDate
@NSManaged var displayOrder: NSNumber
@NSManaged var trainingdayRel: NSSet
@NSManaged var exercisesRel: NSSet
@NSManaged var routineSplitsRel: NSSet
}
class RoutineSplits: NSManagedObject {
@NSManaged var id: NSNumber
@NSManaged var uid: String
@NSManaged var displayOrder: NSNumber
@NSManaged var isdeleted: NSNumber
@NSManaged var name: String
@NSManaged var routinesRel: myTP.Routines
}
获取请求:
let fetchRequest = NSFetchRequest(entityName: "Routines")
let sortDescriptor = NSSortDescriptor(key: "displayOrder", ascending: true)
let sortDescriptor1 = NSSortDescriptor(key: "routineSplitsRel.displayOrder", ascending: true)
fetchRequest.predicate = NSPredicate(format: "isdeleted == %@",NSNumber(bool: false))
fetchRequest.sortDescriptors = [sortDescriptor,sortDescriptor1]
请您参考如下方法:
您不能直接对一对多关系进行排序。 您需要获取它们,然后才能对它们进行排序。 当您获得 NSSet 时,您可以使用 mySet.allObjects()
所以会是这样的
fetchResults.allObjects.sort({ $0.displayOrder.integerValue > $1.displayOrder.integerValue })
