2012-04-30 11 views
0

現在のコアデータの実装には関係がないため、必要なときに情報を取得するのが非常に難しく、難しくなります。 >ドクター--one対多 - - >スケジュール親エンティティオブジェクトを取得するにはどうしたらいいですか?

今、あなたの想像

が患者--one対多:私はこのような関係に行くつもりです

スケジュールからNSManagedObjectがある場合は、どのようにして親の医者の管理対象オブジェクトを取得できますか?

スケジュールエンティティを独自に使用することはできますか(医師と関係のないスケジュール)?

答えて

0

これは実現できますが、これはお勧めできません。

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; 
} 
+0

構文がどのようになっているかの小さな例を挙げてください。 (私はそれをどこでも見つけることができませんでした) – Pieter

+0

逆の関係が指定されている場合、私は例を意味しましたか? – Pieter

+1

リバースリレーションシップは、他のリレーションシップとまったく同じ方法で動作します。 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

関連する問題