私の現在のCore Dataの実装は関係がないので、必要なときに情報を取得するのは非常に悪く困難です。
私はこのような関係に行きます。
患者 - 1対多 - >医師 - 1対多 - >スケジュール
今、あなたが持っていると想像してください NSManagedObject
スケジュールから、どのように私は彼の親医師が管理対象を取得するのですか?
それでもスケジュールエンティティを単独で使用することはできますか(医師と関係のないスケジュール)。
回答:
回答№1は0あなたはそれを達成することができますが、これは推奨される方法ではありません。
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;
}