使用NSFetchedResultsController返回具有有序关系的对象

我有以下核心数据结构:

Event <<-->> Team <<-->> Player 

(所有关系都是多对多的,Event> Team&Team> Player是有序的关系)。

伪代码...

self.event = an instance of Event that has been populated earlier on in the process.
linkedTeams = the relationship between Team & Player.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *thisEntry = [NSEntityDescription entityForName:@"Player" inManagedObjectContext:self.doc.managedObjectContext];
[fetchRequest setEntity:thisEntry];

NSPredicate *fetchPredicate = [NSPredicate predicateWithFormat:@"ANY %@ IN linkedTeams", self.events.teams];
[fetchRequest setPredicate:predicate];


NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.doc.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

这将拉出self.event.teams中的所有玩家,罚款,谓词起作用,但是,我希望玩家根据团队和玩家(通过使用有序关系)进行排序,并分成若干部分(使用Team作为部分头)。

如果从玩家实体直接拉取玩家,我如何按照有序关系来排列玩家,看起来这对于NSSortDescriptor来说是不可能的?

我不能拥有“sectionNameKeyPath = linkedTeams.name”,因为linkedTeams是一对多的关系(尽管在这种情况下它只会返回1个团队)。 有没有办法做到这一点与NSFetchedResultsController或我最好只是创建自己的数据源形式我的财产self.event?

谢谢你的帮助!


问题在于玩家可能在你的表格视图中出现两次或更多次(因为玩家可能在多个团队中)。 使用提取的结果控制器不止一次地获取实体是很困难的。

相反,你可以取得球队。 调整您的datasource方法,以引用团队名称作为部分标题,并将与订购关系的行填充到播放器中。 现在,如果一个球员不止一个球队,它将会再次显示。

如果您不希望一个玩家参加两个以上的团队,则需要将您的数据模型更改为

Event <<-->> Team <--->> Player 

你的任务应该是微不足道的。

注意:另外,根据我的经验,有序关系结果是使用有限,灵活性在许多情况下非常麻烦并且容易出错。 在所有情况下,我都引入了sequence属性来跟踪订单。

链接地址: http://www.djcxy.com/p/36157.html

上一篇: Using NSFetchedResultsController to return objects with ordered relationships

下一篇: NSFetchedResultsController with sections sorted by TWO criteria