swift - 比较 Fetchrequest Xcode Swift OSX Core Data Predicate 中的 NSSet

标签 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 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 的 Person 获取一个 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;

            }

当然,它相当慢......不是很好

关于swift - 比较 Fetchrequest Xcode Swift OSX Core Data Predicate 中的 NSSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892366/

相关文章:

ios - 谁能解释一下这个 NSPredicate 语法

ios - NSPredicate遍历关系(StackMob)

ios - 如何使用谓词按字段执行查询?

ios - 快速 xcode 错误 : "instance member ' name' cannot be used on type 'clothing_category'

ios - 删除[环境: Sandbox]

ios - Xcode 错误地设置为使用旧版构建系统

ios - swift 代码在 Xcode 7 中不起作用(setCategory、AVFormatIDKey、AVAudioRecorder)

swift - 字典为 nil : AnyObject does not have a member named 'Key'

ios - 在 View 中嵌套字段

swift - 使用 autoID 从 Firebase 获取数据 - Xcode