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.