1

我正在努力处理核心数据的某些方面,即设置一个 UITableView 来列出来自一对多关系的数据。

我有三个实体,Teams、TeamDetails 和 Players:

在此处输入图像描述

在第一个视图中,我列出了 Teams 实体中所有团队的名称,然后点击每个单元格转到带有按钮的中间视图,以编辑团队的详细信息或编辑团队的球员。点击一个按钮会转到另一个列出团队详细信息或球员的 UITableView。

列出 TeamDetails 是可行的,因为它是一对一的关系和静态单元格表​​。

我正在尝试设置一个 UITableViewController 来列出与所选球队相关的所有球员。所以我通过 segue 将 ManagedObjectContext 等传递给表视图控制器,如下所示:

else if ([segue.identifier isEqualToString:@"ShowPlayersSegue"]){
    NSLog(@"Setting ShowPlayersTVC as a delegate of EditPlayerTVC");
    ShowPlayersTVC *showPlayerTVC = segue.destinationViewController;
    showPlayerTVC.delegate = self;
    showPlayerTVC.managedObjectContext = self.managedObjectContext;

    showPlayerTVC.team = self.team;
    showPlayerTVC.player = self.team.playerDetails;
}

因此,在我的 showPlayerTVC 中,我想获取该特定球队的球员集,然后为每个球员设置一行,将 playerName 属性显示为单元格 textlabel.text。

我一直在阅读教程并玩了很长时间,但没有取得太大的成功。我想我需要从 NSSet 创建一个 Player 对象数组,我可以这样做,但我无法让 UITableview 列出对象。我可能在这里遗漏了一些基本的东西,但任何建议都将不胜感激。

4

1 回答 1

1

首先,您的数据模型存在一些问题。

一对一的细节我不明白 - 为什么不直接向 Team 实体添加属性?此外,您可能希望将其中一些转换为更灵活的关系,例如 Trainer 实体等。

此外,您的命名存在缺陷,会导致编程错误或至少使您的代码难以阅读。注意单数/复数混淆。这是我为您的实体/关系命名的建议:

Team - players <--------------->> team - Player  

要在表格视图中显示数据,您应该使用NSFetchedResultsController. 让 FRC 获取 Player 实体并为其获取请求提供以下谓词:

[NSPredicate predicateWithFormat:@"team = %@", teamObject]; 

您的 segue 代码几乎是正确的。给新的视图控制器一个team属性,并在其获取的结果控制器的上述谓词中使用它。您不需要任何球员或“球员详细信息”信息(无论如何它们都与球队相关联)。

于 2013-04-23T13:13:54.153 回答