2011-03-03 3 views
12

이 코드의 문제점은 무엇입니까?코어 데이터 : 키 패쓰 오류가 엔티티에 없습니다. <NSSQLEntity Studies id = 3>

reason: 'keypath Studies.patients.PatientName not found in entity <NSSQLEntity Studies id=3>' 

코드 :

- (void)viewDidLoad { 
     [super viewDidLoad]; 

     test_coredataAppDelegate *appDelegate = (test_coredataAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     self.context = appDelegate.managedObjectContext; 


     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     NSEntityDescription *entity = [NSEntityDescription 
             entityForName:@"Studies" inManagedObjectContext:_context]; 
     [fetchRequest setEntity:entity]; 
     /**/ 
     NSLog(patientName); 
     [fetchRequest setPredicate:[NSPredicate predicateWithFormat: 
           @"(Studies.patients.PatientName == %@)",patientName]]; 



     NSError *error; 
     self.StudiessList = [_context executeFetchRequest:fetchRequest error:&error]; 
     self.title = @"patients"; 
     [fetchRequest release]; 

    } 

답변

15

첫 번째로, 가져 오기 엔티티가 Studies이므로 첫 번째 위치에서 Studies 개체가 조건 자 테스트를 받기 때문에이를 조건 자에 포함하지 않습니다. 그래서 술어는 적어도 단지 있어야한다 :

patients.PatientName == %@ 

그러나, 관례, patients는 일대 다 관계를 나타냅니다. 그렇다면 실제로는 patients의 값이 (아마도) Patient 개체의 집합임을 의미합니다. 따라서 위와 같이 속성 값에 대해 집합을 요청할 수 없습니다. 대신 집합에서 조건부와 일치하는 모든 객체 집합을 요청해야합니다. 그래서 같은 일부 또는 전부 연산자를 사용합니다 : 그것은 patientName해야하는 속성이 PatientName 그래서 만약

ALL patients.PatientName == %@ 

나는 모든 속성과 관계 이름은 소문자로 시작하는 규칙에 따라 그를 추가합니다.

+0

하지만 모든 조항 작동하지 않습니다 – Ali

+0

그것은 당신이 그때 필요가있는 것처럼 들리 네. "모든 patient.patientName이 변수와 같은 모든 연구"를 찾고있는 것 같습니다. 이 경우 ALL은 적합하지 않습니다. 모든 patients.patientName이 같은 이름을 가진 경우에만 모두 작동합니다. – TechZen

5

어느 어떤 실체 환자 속성 또는이없는 연구 기관이 환자 관계의 점은없는 수는 충돌에 다음과 같은 오류 및 원인 응용 프로그램을 제기 PatientName 속성 (대문자 또는 소문자에주의) 또는 둘 다

+0

+1 사실 관계가이 오류를 줄 수 있습니다. 고마워요 :) –