2011-05-26 10 views
11

Tengo dos entidades de Datos centrales (Client y UserFile) con las que he establecido una relación con éxito.¿Cómo debería asociar entidades de datos centrales para usar con RestKit?

He creado clases para ambas entidades y las he convertido en subclases de RKManagedObject.

Cuando creo un nuevo UserFile, quiero asociarlo correctamente con un Client. Aquí es lo que estoy haciendo:

Client *client = [Client objectWithPrimaryKeyValue:@"1"]; 
UserFile *file = [UserFile object]; 
file.client = client; 
file.clientId = client.clientId; 
[[RKObjectManager sharedManager] postObject:file delegate:self]; 

Parece que tengo que dedicar file.clientId de manera que el parámetro correcto se envía al servidor (si sólo asigno file.client entonces el client_id presentado está en blanco).

Parece que tengo que asignar file.client para evitar que se cree y se asocie con el archivo el nuevo (la relación con el cliente es obligatoria).

Es esto correcto? ¿Realmente tengo que asignar tanto la clave foránea como la entidad real? Esto me parece un poco redundante, ¡pero felizmente admitiré que me faltan conocimientos de Core Data y de RestKit!

+0

podría publicar la pregunta y agregar su implementación - (NSDictionary *) elementToPropertyMappings. – ugiflezet

Respuesta

9

Para responder a su pregunta, parece que necesita hacer ambos pasos en este momento. Aquí está el código de la RKDiscussionBoardExample se incluye con la biblioteca:

DBTopic* topic = [[DBTopic findFirstByAttribute:@"topicID" withValue:topicID] retain]; 
_post = [[DBPost object] retain]; 
_post.topicID = topic.topicID; 
_post.topic = topic; 

Así que, o las relaciones no están configurados correctamente en el ejemplo, o que realmente necesitan dos pasos.

Además, debe utilizar la versión más reciente de RestKit que tiene un correlacionador de objetos diferente y desaprueba RKManagedObject. Sus relaciones deberían verse más o menos así:

RKManagedObjectMapping* clientMapping = [RKManagedObjectMapping mappingForClass: [Client class]]; 
clientMapping.primaryKeyAttribute = @"clientID"; 
[clientMapping mapKeyPathsToAttributes: 
@"id", @"clientID", 
nil]; 

RKManagedObjectMapping* userFileMapping = [RKManagedObjectMapping mappingForClass:[UserFile class]]; 
userFileMapping.primaryKeyAttribute = @"userFileID"; 
[userFileMapping mapKeyPathsToAttributes: 
@"id", @"userFileID", 
@"client_id", @"clientID", 
nil]; 

[userFileMapping mapRelationship:@"client" withObjectMapping:clientMapping]; 
Cuestiones relacionadas