Моето настоящо внедряване на основни данни няма никакви взаимоотношения, така че е много лошо и трудно да се получи информацията, когато е необходимо.
Ще отида при такива взаимоотношения:
пациент - един до много -> лекар - един към много -> графици
Сега си представете, че имате NSManagedObject
от графиците, как да получа предмета му, управляван от родителя,?
Мога ли да използвам самостоятелно програмата (графици без връзка с лекар)?
Отговори:
0 за отговор № 1Можете да го постигнете, но това не е препоръчителен метод.
1: Вземи масив от лекарски предмети.
2: Повторете чрез лекарски предмети, за всеки лекар обект да му масив от графици и итерат чрез всеки график, за да намерите мач.
Правилният метод е да имате обратна връзка от графици до лекар, което е точно това, което казва Apple (без който и xcode има предупреждение)!
Ето кода на кода. Тук приемам, че всеки графичен обект има графика "scheduleId", за да идентифицира всеки един от тях.
- (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;
}