0

返回一个对象,我有以下核心数据结构:使用NSFetchedResultsController与有序的关系

Event <<-->> 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?

感谢您的帮助!

回答

1

的问题是,一个球员可以在您的表视图发生两次或更多次(因为玩家可以在一个以上的团队)。使用提取的结果控制器不止一次地获取实体是很困难的。

相反,你可以获取团队。调整您的datasource方法,将小组名称作为小节标题进行引用,然后将具有有序关系的行填充到播放机中。现在,如果一个球员不止一个球队,它将会再次显示。

如果你不希望一个球员要在两个以上的球队,你需要将你的数据模型改变为

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

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

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

+0

谢谢曼迪,请你能在“调整您的数据源的方法来引用队名的栏目标题,并填充行与玩家所订购的关系。”扩大?如果我已经取得团队,我将如何用玩家填充UITableView?这可能使用NSFetchedResultsController? – Darthtong

+0

我的工作了,最终,我选择了与NSFetchedResultsController队然后被操纵的数据源的方法来看看玩家的团队中的对象。 – Darthtong

相关问题