/ 親エンティティオブジェクトを取得するにはどうすればよいですか。 - Objective-C、IOS、Xcode、コアデータ

親エンティティオブジェクトを取得するにはどうしたらいいですか? - objective-c、ios、xcode、core-data

私の現在の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;
}