0

我有两个实体,一个叫做游戏,一个叫做团队。Games 实体与称为团队的团队具有一对一关系,而团队实体与称为游戏的游戏具有一对多关系。(一支球队可以参加很多场比赛,但一场比赛只能有一支球队。我为对手使用了一个单独的实体)

我正在使用它的 ID 选择一个团队。这是我将团队添加到 Games 实体的代码:

Games *newGame = (Games *) [NSEntityDescription insertNewObjectForEntityForName:@"Games" inManagedObjectContext:self.managedObjectContext];

    NSFetchRequest *fetchTeams = [[NSFetchRequest alloc] init];
    NSEntityDescription *fetchedTeam = [NSEntityDescription entityForName:@"Teams"
                                                   inManagedObjectContext:self.managedObjectContext];
    [fetchTeams setEntity:fetchedTeam];
    NSArray *fetchedTeams = [self.managedObjectContext executeFetchRequest:fetchTeams error:&error];

    for (Teams *myTeam in fetchedTeams) {

        if (myTeam.teamID == teamid){

            newGame.teams = myTeam;

        }
    }

我得到的错误是:'NSInvalidArgumentException',原因:'ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet。

我不明白, newGame.teams 是 Teams 的对象,它不是 NSSet。如果我在做 Teams.games,那将是一个 NSSet。

我究竟做错了什么?

4

1 回答 1

0

您没有在这里描述变量“teamid”的数据类型是什么。因此,我假设它必须是一些原始类型 int。

基于此假设,您可以在代码中进行以下更改:

if(fetchedTeams!=nil)
{
  if(fetchedTeams.count>0)
  {
     for(Teams *myTeam in fetchedTeams)
     {
       //check here because coredata stores a number in NSNumber object. 
       //Hence you've to get the intValue to make a equality check, like below

       if(myTeam.teamID.intValue == teamid) 
       {
          //do your stuff here.
          //Also check the last part of my answer, I have a question here.
       }

     }
  }
}

在您的代码中,您有“ newGame.teams = myTeam”。teams“ ”中“ ”的数据类型是什么newGame?是吗Teams*NSSet*

于 2013-08-09T11:59:24.330 回答