1

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

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

在我的 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 的游戏传递给另一个表视图控制器......我知道如何在视图之间传递数据,我只是不知道如何填充“gamesArray”在我转换到计划视图之前。

4

2 回答 2

1

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

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

于 2013-05-01T06:02:04.757 回答
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.

}
于 2013-05-02T00:52:25.517 回答