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