2013-08-09 3 views
0

게임이라는 엔티티와 팀이라는 엔티티가 있습니다. 게임 엔티티는 팀이라고하는 팀과 1 대 1의 관계를 가지고 팀 엔티티는 게임이라고하는 게임과 많은 관계를 맺습니다. (한 팀은 많은 경기에 출전 할 수 있지만 한 팀만이 팀을 가질 수 있습니다. 상대방을 위해 별도의 엔티티를 사용 중입니다)코어 데이터 1 대 다수 관계에 오브젝트를 추가하면 오류가 발생합니다.

팀을 ID로 선택합니다.

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는 팀의 대상이며 NSSet이 아니다. Teams.games를하고 있다면 NSSet이됩니다.

내가 뭘 잘못하고 있니?

+1

이것이 충돌하는 곳입니까? 나는 그런 오류를 보았지만 술어와 함께 가져 오기 요청을 실행할 때만 보았다. – lammert

답변

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"가. 'newGame'에 'teams'의 데이터 유형은 무엇입니까? Teams* 또는 NSSet*입니까?

+0

안녕하세요, 귀하의 질문에 대답하십시오. teamid는 활성 팀을 선택하도록 지정된 int입니다. newGame.teams는 Teams * NSSet이 아닙니다. 그러나 Teams.games의 역관계는 NSSet입니다. – TazmanNZL

+0

가져 오기 요청이 정상입니다. newGame.teams = myTeam에서 충돌이 발생합니다. 다음 메시지도 받게됩니다. CoreData : error : 심각한 응용 프로그램 오류입니다. 핵심 데이터 변경 처리 중에 예외가 발생했습니다. 이것은 일반적으로 NSManagedObjectContextObjectsDidChangeNotification의 관찰자 내에있는 버그입니다. – TazmanNZL

+0

코어 데이터의 자동 생성 기능을 사용하여 팀 관계를 '[newGame.teams setTeams : myTeam]; 코어 데이터 엔티티의 h 파일과 m 파일을 생성했기를 바랍니다. – CodenameLambda1