これは実現できますが、これはお勧めできません。
1:医者のオブジェクトの配列を取得します。
2:医者オブジェクトごとに反復する。各医師オブジェクトに対して、それはスケジュールの配列を取得し、各スケジュールを反復して一致を見つける。
正しい方法は、スケジュールと医者の間に逆の関係があることです。これはAppleが言うことです(xcodeも警告を出しません)!
ここにコードがあります。ここで私は、各スケジュールオブジェクトがそれぞれを識別するために 'scheduleId' inorderを持っていると仮定しています。
- (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;
}
構文がどのようになっているかの小さな例を挙げてください。 (私はそれをどこでも見つけることができませんでした) – Pieter
逆の関係が指定されている場合、私は例を意味しましたか? – Pieter
リバースリレーションシップは、他のリレーションシップとまったく同じ方法で動作します。 AからBへの1対多の関係を持っている場合は、xcdatatmodelエディターでBからAへの関係を追加し、この関係を他の関係の逆数と言います。これらのエンティティの.h .mファイルを自動生成するとき、Aは2つのメソッド1を持ちます。addObject:(B *)value 2:addObjects:(NSSet *)vaulesとBはAへの参照を持ちます。 Bのインスタンスを作成するたびに、これらの関数を呼び出すだけです。新しいBについては、[A addObject:B](子関係)とB.referenceToA = A(親関係)を呼び出してください。 – Advaith