gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:59:38 26 4
gpt4 key购买 nike

我有以下核心数据结构:

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 中的所有玩家,谓词有效,但是,我想让玩家按团队和玩家排序(通过使用有序关系),并分成几个部分(使用团队作为节标题)。

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

我不能使用“sectionNameKeyPath = linkedTeams.name”,因为 linkedTeams 是一对多关系(即使在这种情况下它只会返回 1 个团队)。有没有办法用 NSFetchedResultsController 来做到这一点,或者我最好只是从我的属性 self.event 创建自己的数据源?

感谢您的帮助!

最佳答案

问题是一名球员可以在您的表格 View 中出现两次或多次(因为一名球员可以在多个球队中)。使用获取结果 Controller 多次获取实体是很困难的。

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

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

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

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

注意:此外,根据我的经验,有序关系的用途有限,而且在许多情况下灵 active 相当麻烦且容易出错。在所有情况下,我都引入了一个 sequence 属性来自己跟踪顺序。

关于ios - 使用 NSFetchedResultsController 返回具有有序关系的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com