我有一个名为 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”。
答案 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.
}