我当前的 Core Data 实现没有任何关系,因此非常糟糕且难以在需要时获取信息。
我要去这种关系:
病人——一对多——>医生——一对多——>时间表
现在假设你有一个NSManagedObject
from schedules,我如何获取他的父医生管理对象?
我仍然可以单独使用 schedules 实体(与医生没有关系的时间表)吗?
我当前的 Core Data 实现没有任何关系,因此非常糟糕且难以在需要时获取信息。
我要去这种关系:
病人——一对多——>医生——一对多——>时间表
现在假设你有一个NSManagedObject
from schedules,我如何获取他的父医生管理对象?
我仍然可以单独使用 schedules 实体(与医生没有关系的时间表)吗?
您可以实现它,但这不是推荐的方法。
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;
}