2011-10-08 15 views
7

Soy nuevo en los datos básicos, por lo tanto, tengo algunas preguntas. Preguntaré dosInsertar datos básicos y buscar en muchas entidades de relación

1) Tengo dos entidades llamadas Team y TeamMembers. Tienen una relación de muchos, es decir, un equipo puede tener muchos miembros. Primero, observe el siguiente diagrama y los archivos .h de los modelos y avíseme si he realizado una relación correcto-muchos entre el Equipo y los Miembros del equipo (tengo la sensación de que hice una relación inversa).

enter image description here

Teams.h

#import <CoreData/CoreData.h> 

@class TeamMembers; 

@interface Teams : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * team_name; 
@property (nonatomic, retain) NSString * color; 
@property (nonatomic, retain) NSString * points; 
@property (nonatomic, retain) TeamMembers * members; 

@end 

TeamMembers.h

#import <CoreData/CoreData.h> 

@class Teams; 

@interface TeamMembers : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * member_name; 
@property (nonatomic, retain) NSSet* teams; 

@end 


@interface TeamMembers (CoreDataGeneratedAccessors) 
- (void)addTeamsObject:(Teams *)value; 
- (void)removeTeamsObject:(Teams *)value; 
- (void)addTeams:(NSSet *)value; 
- (void)removeTeams:(NSSet *)value; 

@end 

2) por favor necesito código de ejemplo para insertar equipo después insertando sus miembros del equipo. También cómo buscar miembros del equipo de un equipo en particular.


editado estoy usando siguiente fragmento de código para insertar en equipos y miembros del equipo entidades pero no devuelve todos los miembros del equipo en NSSet. Está devolviendo solo un miembro del equipo en el conjunto de resultados

self.context = [del managedObjectContext]; 

      Teams *teamobj = [NSEntityDescription 
          insertNewObjectForEntityForName:@"Teams" 
          inManagedObjectContext:context]; 
      teamobj.team_name = teamname.text; 
      teamobj.color = [NSString stringWithFormat:@"%d", color]; 
      teamobj.points = [NSString stringWithFormat:@"%d", 0]; 

      for(UITextField *view in self.scrollview.subviews) 
      { 
       if([view isKindOfClass:[UITextField class]]) 
       { 
        if ([view tag] == 99) { 
         if (![view.text isEqualToString:@""]) { 
          noone = YES; 
          TeamMembers *teammember = [NSEntityDescription 
               insertNewObjectForEntityForName:@"TeamMembers" 
               inManagedObjectContext:context]; 
          teammember.member_name = view.text; 
          teammember.teams = teamobj; 

          [teamobj addMembersObject:teammember]; 
         } 
        } 
       } 
      } 
if (![context save:&error]) { 
       NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" message:@"Unable to save team at the moment." delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil]; 
       [alert show]; 
       [alert release];    
      } 

Respuesta

8

Sí, ha hecho la relación inversa. Usted tiene un miembro del equipo que tiene muchos equipos y un equipo que pertenece a un miembro. Puede decirlo con las flechas en la línea de relación: la flecha doble significa "tiene muchas" y la flecha simple significa "tiene una" o "pertenece a" (lea en la dirección hacia la que apunta la flecha).

Debe cambiar la dirección en el navegador de modelos, descartar las clases generadas existentes y luego volver a generarlas.

Cuando tenga la relación establecida correctamente, puede usar los accesos generados para agregar miembros a un equipo y recuperar miembros para un equipo en particular.

EDITAR para mostrar ejemplo de cómo agregar un nuevo miembro del equipo para un equipo:

TeamMember *newTeamMember = [NSEntityDescription insertNewObjectForEntityForName:@"TeamMember" inManagedObjectContext:context]; 
newTeamMember.team = <existing team managed object> 

Es tan simple como eso. Core Data se asegurará de que la relación inversa se actualice automáticamente, por lo que la colección teamMembers del equipo incluirá el nuevo miembro que acaba de agregar.

+0

Gracias por la respuesta.¿Puede mostrar un ejemplo de inserción en TeamMembers para el equipo particular –

+0

? También es una convención nombrar sus entidades como objetos singulares que no son plurales; por lo tanto, 'Equipo' y 'Miembro del equipo', no 'Equipos' y 'Miembros del equipo'. –

+0

Gracias por mostrar el código de muestra. ¿pueden mostrar también cómo agregar NSSet de los miembros del equipo a un equipo? –

1

Tal vez mi respuesta será demasiado tarde, pero no se olvide de comprobar "A-Muchos Relación" en la ventana de propiedades de "relación". Eliminar regla importante, así como "relación a muchos".

Tal vez esto también será útil, estoy inserción de objetos relacionados de NSMutableArray por el siguiente código:

NSSet *itemsSet; 
[itemsSet setByAddingObjectsFromArray:YOUR_NSMUTABLEARRAY]; 
[MAIN_OBJECT addItems:itemsSet]; 
Cuestiones relacionadas