首页 文章

来自To-Many关系的核心数据详细信息视图

提问于
浏览
1

我正在努力解决Core Data的某些方面,即设置UITableView以从多对多关系中列出数据 .

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

enter image description here

在第一个视图中,我列出了团队实体中所有团队的名称,然后点击每个单元格分段到中间视图,其中有按钮可以编辑团队的详细信息或编辑团队的玩家 . 点击按钮会切换到另一个列出团队详细信息或玩家的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列出对象 . 我可能在这里遗漏了一些基本的东西,但任何建议都会受到赞赏 .

1 回答

  • 1

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

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

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

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

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

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

    你的segue代码几乎是正确的 . 为新视图控制器提供一个 team 属性,并在其获取的结果控制器的上述谓词中使用它 . 您不需要任何播放器或"playerDetails"信息(无论如何它们都与团队相关联) .

相关问题