使用Core Data获取一对多关系数据

时间:2013-05-01 00:05:27

标签: objective-c core-data one-to-many relationship

我有一个名为 SeasonInfo 的实体的Core Data模型,其中包含一堆属性,其中一个属性称为 year (int 16)。 SeasonInfo 包含与名为 GameInfo 的实体的一对多关系(在SeasonInfo中定义的关系名称称为 games )。

我的填充数据库包含一堆季节(每年一个)...然后每个季节都有一个游戏列表 - 每个赛季的一堆游戏。 SeasonInfo < ---->> 的GameInfo

在我的TableView控制器中,我使用以下内容访问给定年份的 SeasonInfo

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"SeasonInfo"      inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

// Set up the cell...
SeasonInfo *info = [seasonInfoArray objectAtIndex:indexPath.row];

//Put the Year as the Main title of the Row
yearLabel.text =[NSString stringWithFormat: @"%@",   info.year];

这似乎很有效......但现在我无法弄清楚如何在特定赛季中使用这些游戏。从这个表视图中,当我选择一个特定年份时,我想将一个NSArray游戏传递给另一个Table View控制器...我知道如何在视图之间传递数据,我只是想不通如何填充在转换到Schedule View之前,“gamesArray”。

2 个答案:

答案 0 :(得分:1)

如果您已经在Core Data中正确创建了关系,那么您可以通过它的属性访问游戏关系。

所以info.games应该为SeasonInfo返回一个GameInfo的NSSet。

答案 1 :(得分:0)

如果您只需要获取特定季节的游戏,那么您可以在获取之前使用谓词(这仅适用于int 32,将字符串格式说明符(%d)更改为int16所需的任何内容) :

NSPredicate * equalPredicate = [NSPredicate predicateWithFormat:@“year ==%d”,year];     [fetchRequest setPredicate:equalPredicate];

如果您不想这样做并希望收集所有内容,那么在您的executeFetchRequest完成并且您处于成功完成块后,您将获得NSArray *结果。

for (SeasonInfo * seasonInfo in results)
{
    if ([seasonInfo year] == <whatever year you want>)
    {
        //save this seasonInfo for use, this contains the games you're interested in.
    }
}

之后,获得seasonInfo中的特定游戏

for (GameInfo * gameInfo in [seasonInfo games])
{
   // Do what's needed with the gameInfo.

}
相关问题