核心数据以一对多关系排序

Posted

技术标签:

【中文标题】核心数据以一对多关系排序【英文标题】:Core Data sorting in one to many relationship 【发布时间】:2010-10-05 19:30:50 【问题描述】:

我已经设置了一个数据模型,其中学生实体的名称与主题是一对多的关系。他参加的每个科目都有多个上课时间。

下面的代码根据学生姓名对其进行排序,这很简单。

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

我想做的是对其进行排序,以便在每个学生需要参加的下一堂课时对其进行排序。所以显示将是学生,并按下一节课的时间排序。有什么想法吗?

我尝试了以下方法

    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Student" inManagedObjectContext:managedObjectContext]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(subjects.time > %@)", [NSDate date]]];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

我收到错误“'此处不允许多对多键'”,然后我尝试了 setRelationshipKeyPathsForPrefetching: 但这并没有获取主题的多对多关系。有什么想法吗?

【问题讨论】:

【参考方案1】:

这是过程:

试试这个。取学生。然后,对于每个学生,从 Class 中获取“时间”,对于 Student(以谓词格式)“大于或等于当前时间”,按“时间”排序。显示详细信息。如果你把它放在一个循环中,你就有答案了。

【讨论】:

'time' 是 Class 的一个属性。所以流程应该是这样的,从学生那里获取“名字”。从该学生的班级中获取所有“时间”。对“时间”进行排序以找到下一个上课时间(从现在开始)。然后根据下一节课时间对所有学生进行排序。 我正在努力让代码正常工作,因此问题是,有人可以帮助我吗? 试试这个。取学生。然后,对于每个学生,从 Class 中获取“时间”,对于 Student(以谓词格式)“大于或等于当前时间”,按“时间”排序。显示详细信息。如果你把它放在一个循环中,你就有答案了。 你有一些代码来告诉我这应该如何工作。我正在努力让第二次获取工作。 我必须编写代码。不是我现在有时间做的事情。如果您将项目以 zip 文件的形式发布到可下载的网站上,我会看一看,或者给我发电子邮件。

以上是关于核心数据以一对多关系排序的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:在一对多关系中按日期属性排序

用于核心数据一对多关系的 NSSortDescriptor

核心数据以一对多关系保存在后台

核心数据:以一对多关系存储有序值

核心数据:以一对多的关系获取实体的获取请求

核心数据 - 以一对多关系访问实例与获取请求?