objective-c core-data nspredicate nsfetchrequest

objective c - Datos principales: el error Keypath no se encuentra en la entidad<NSSQLEntity Studies id=3>



objective-c core-data (2)

¿Alguien podría decirme qué pasa con este código? Genera el siguiente error y causa que la aplicación se cuelgue:

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

Código:

- (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]; }


En primer lugar, dado que su entidad de búsqueda es Studies , no la incluye en el predicado porque los objetos de Studies son los que reciben la prueba de predicado en primer lugar. Entonces tu predicado debería ser al menos justo:

patients.PatientName == %@

Sin embargo, por convención, los patients indicarían una relación de muchos. Si es así, eso significa que el valor real de los patients es un conjunto de (presumiblemente) objetos del Patient . Como tal, no puede solicitar un conjunto para un valor de atributo como el anterior: en su lugar, debe solicitar un nuevo conjunto de todos los objetos del conjunto que coinciden con el predicado. Utilice el operador ANY o All como sigue:

ALL patients.PatientName == %@

Yo agregaría que, por convención, todos los nombres de atributos y relaciones comienzan con letras minúsculas, por lo que si PatientName es un atributo, debe ser patientName .


O bien la entidad de Estudios no tiene una propiedad del paciente, o la entidad a la que apunta la relación del paciente no tiene una propiedad PatientName (preste atención a los problemas de mayúsculas / minúsculas) o ambas.