比较Fetchrequest Xcode Swift OSX核心数据的谓词中的NSSet

比较Fetchrequest Xcode Swift OSX核心数据的谓词中的NSSet,swift,xcode,nspredicate,nsfetchrequest,Swift,Xcode,Nspredicate,Nsfetchrequest,我有两个NSManagedObject像 class Person: NSManagedObject { @NSManaged var firstname: String; @NSManaged var lastname: String; @NSManaged var code: String; @NSManaged var position: Int16; @NSManaged var lasttime: NSDate; @NSManaged

我有两个
NSManagedObject

class Person: NSManagedObject {

    @NSManaged var firstname: String;
    @NSManaged var lastname: String;
    @NSManaged var code: String;
    @NSManaged var position: Int16;
    @NSManaged var lasttime: NSDate;
    @NSManaged var isvip: Int16;    
    @NSManaged var changeposition: NSSet;   
}


class ChangePosition: NSManagedObject {

    @NSManaged var person:Person
    @NSManaged var code: String;
    @NSManaged var from: Int16;
    @NSManaged var to: Int16;
    @NSManaged var time: NSDate;   
}
因此,我有一个人有许多
ChangePosition
作为
NSSet
。每个
ChangePosition
都有一个
NSDate


现在,我想尝试从具有最高
NSDate
的人那里获取一个
ChangePosition
。我可以使用哪个谓词结构来完成这个任务?

所以我的实际工作流程就是这个

let fetchReqPerson = NSFetchRequest(entityName: "Person");
        //fetchReq.predicate = NSPredicate(format: "ANY personchangeposition.time == maxElement(personchangeposition.time)")



        do {

            let fetchResult = try self.appDelegate.managedObjectContext.executeFetchRequest(fetchReqPerson)

            for managedObject in fetchResult {

                var bigTime:PersonChangePosition?


                for changes in (managedObject as! Person).personchangeposition {



                    if (changes as! PersonChangePosition).time.compare(_date) == NSComparisonResult.OrderedAscending {

                        if bigTime == nil {
                            bigTime = changes as! PersonChangePosition
                        } else {

                            if (changes as! PersonChangePosition).time.compare(bigTime!.time) == NSComparisonResult.OrderedDescending {
                                bigTime = changes as! PersonChangePosition;
                            }

                        }

                    }

                }

                if bigTime != nil {
                    //print("bigTime: ",bigTime!.time, "to: ",bigTime!.to)

                    self.fetchResultPerson.append(bigTime!)
                }



            }


            self.fetchForRecord = self.fetchResultPerson;

            //print("fetchResult fetchResultPerson: ",fetchResultPerson.count)


            } catch let fetchError as NSError {

            print("Fetching error: ",fetchError)
            }



            //

            switch(self.areaSegementControl.selectedSegment){


            case 0: self.fetchForRecord = try self.fetchForRecord.filter({$0.to != 4})
            break;

            case 1: self.fetchForRecord = try self.fetchForRecord.filter({$0.to == 1 || $0.to == 3})
            break;

            case 2: self.fetchForRecord = try self.fetchForRecord.filter({$0.to == 2})
            break;

            default:
            break;

            }
但当然,这相当缓慢。。。。不太好