0

我有以下核心数据结构:

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 和 Player 排序(通过使用有序关系),并分成几个部分(使用 Team 作为部分标题)。

如果直接从 Players 实体中提取,我如何根据 Ordered 关系对 Players 进行排序,似乎这对于 NSSortDescriptor 是不可能的?

我不能有“sectionNameKeyPath = linkedTeams.name”,因为linkedTeams 是一对多关系(即使在这种情况下它只会返回一个团队)。有什么方法可以使用 NSFetchedResultsController 执行此操作,还是我最好只是从我的属性 self.event 创建自己的数据源?

谢谢你的帮助!

4

1 回答 1

1

问题是一个玩家可以在您的表格视图中出现两次或多次(因为一个玩家可以在多个团队中)。很难使用 fetched results 控制器多次获取实体。

相反,您可以获取团队。调整您的datasource方法以引用团队名称作为部分标题,并使用与玩家的有序关系填充行。现在,如果一名球员在多支球队中,它只会再次显示。

如果您不希望一名球员加入两支以上的球队,则需要将数据模型更改为

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

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

NB:此外,在我的经验中,有序关系的用处有限,而且在许多情况下,它的灵活性非常麻烦且容易出错。在所有情况下,我都引入了一个sequence属性来自己跟踪订单。

于 2013-04-17T13:36:52.857 回答