/ / Come posso ottenere l'oggetto entità padre ed è possibile una relazione opzionale? - obiettivo-c, ios, xcode, core-data

Come posso ottenere l'oggetto entità padre ed è possibile una relazione opzionale? - obiettivo-c, ios, xcode, core-data

La mia attuale implementazione dei Core Data non ha relazioni, quindi molto brutte e difficili da ottenere le informazioni quando necessario.

Vado a questo tipo di relazione:

paziente - uno a molti -> dottore - uno a molti -> orari

Ora immagina di avere un NSManagedObject dagli orari, come posso ottenere il suo oggetto gestito dal genitore medico?

Posso ancora utilizzare l'entità di programmi da solo (programmi senza rapporto con un medico)?

risposte:

0 per risposta № 1

Puoi ottenerlo, ma questo non è un metodo raccomandato.

1: Ottieni una serie di oggetti medici.

2: Esegui l'iterazione degli oggetti del medico, affinché ogni oggetto del medico ottenga la serie di programmi e iterato attraverso ciascuna pianificazione per trovare una corrispondenza.

Il metodo corretto è quello di avere una relazione inversa dagli orari al medico, che è esattamente quello che dice Apple (senza il quale anche xcode segnala un avvertimento)!

Ecco il pezzo di codice. Qui presumo che ogni oggetto di pianificazione abbia un "scheduleId" inorder per identificare ciascuno di essi.

- (NSManagedObjectContext *)getContext {

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];
return managedObjectContext;
}


- (NSArray *)getAllDoctors {
NSManagedObjectContext *managedObjectContext = [self getContext];
NSEntityDescription *messageEntity = [NSEntityDescription entityForName:@"Doctor"
inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:messageEntity];

NSError *error = nil;
NSArray *allDoctors = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
return allDoctors;
}
- (Doctor *)pickDoctorScheduledFor:(NSString *)scheduleId {
NSArray *allDoctors = [self getAllDoctors];

for (Doctor *doctor in allDoctors) {

NSArray *schedulesForThisDoctor = [doctor.schedules allObjects]; // one to many relation!
for (Schedule *schedule in schedulesForThisDoctor) {
if ([schedule. scheduleId isEqualToString: scheduleId]) {
return doctor;
}
}
}
return nil;
}