1

我已经设置了一个数据模型,其中学生实体的名称与Subject有一对多的关系。他参加的每个主题都有许多班级时报。核心数据在一对多关系中排序

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

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:但没有取到多的关系的科目。有任何想法吗?

回答

0

这是过程:

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

+0

'time'是Class的一个属性。所以流程应该像从学生那里获取'名字'一样。从班级获取该学生的所有'时间'。排序'时间'以查找下一个上课时间(从现在开始)。然后根据下一个上课时间对所有学生进行排序。 – munchine 2010-10-06 00:52:41

+0

@munchine是正确的。 – Jordan 2010-10-06 03:23:26

+0

我很努力地得到这个工作的代码,因此这个问题,有人可以帮助我吗? – munchine 2010-10-06 05:20:36