2013-04-23 60 views
1

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

我有三个实体,团队,TeamDetails和玩家:

enter image description here

在第一个观点,我列出了球队的实体所有球队的名字,然后轻拍每个单元塞格斯到中间用按钮查看编辑团队的细节或编辑团队的球员。点击一个按钮后会跳到另一个列出团队细节或玩家的UITableView。

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

我试图设置一个UITableViewController,它列出了与选定团队关联的所有玩家。所以我通过ManagedObjectContext等,以通过SEGUE表视图控制器,如下图所示:

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列出这些对象。我可能错过了一些基本的东西,但任何建议,将不胜感激。

+0

A.您是否已验证您的协调阵列包含正确的Players对象。 Nslog一个playerName或两个,等等。如果有的话,显示你的cellForRowAtIndexPath的代码。 – user523234 2013-04-23 10:34:32

回答

1

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

一对一的细节我不明白 - 为什么不只是添加属性到团队实体?此外,您可能希望将其中一些转换为更灵活的关系,如培训师实体等。

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

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

要你应该使用NSFetchedResultsController的表视图中显示的数据。让FRC获取播放器实体并为其获取请求提供以下谓词:

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

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

+0

谢谢!这现在正在使用Fetched Results Controller。我也对你的观点提出了一些看法 - 我一直在从教程开始构建它,而不是像我一样去修复。在我采取进一步行动之前,可能是时候把所有的东西都整理一下。 – aritchie 2013-04-23 15:24:22