Puede RestKit conectar una relación sin almacenar la clave externa como un atributo, es decir, directamente de la ruta de acceso clave en el JSON?RestKit relaciones de mapeo de objetos con claves externas
En particular, tengo una relación has_many habitaciones de empleo. JSON de la habitación no contiene el trabajo, más bien, ambas se cargan por separado:
- job: {
id: 1,
name: "John"
}
- room: {
id: 4,
job_id: 1,
name: "spare bedroom"
}
El empleo se carga antes de la habitación.
Mis modelos CoreData, Job tiene propiedades para
@interface Job : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *rooms;
@end
@interface Room : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Job *job;
@end
Actualmente agrego un @property (nonatomic, strong) NSNumber *jobID;
la habitación, que me @synthesize
.
JobMapping:
mapping = [RKManagedObjectMapping mappingForClass:[Job class]];
[mapping setPrimaryKeyAttribute:@"identifier"];
[mapping mapAttributes:@"name", nil];
[mapping mapKeyPath:@"id" toAttribute:@"identifier"];
[mapping mapRelationship:@"rooms" withMapping:[Room objectMapping]];
RoomMapping
mapping = [RKManagedObjectMapping mappingForClass:[Room class]];
[mapping setPrimaryKeyAttribute:@"identifier"];
[mapping mapAttributes:@"name", nil];
[mapping mapKeyPath:@"id" toAttribute:@"identifier"];
[mapping mapKeyPath:@"job_id" toAttribute:@"jobID"];
[mapping mapRelationship:@"job" withMapping:[Job objectMapping]];
[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"jobID"];
Me preguntaba si hay alguna manera de hacer esto sin la propiedad de la Id adicional? No quiero tener un atributo jobID en el CoreData xcdatamodeld; es redundante, ya que la relación lo cubre.
Además, si uno vuelve a edificar las NSManagedObjects, tengo que volver a añadir la propiedad de la Id, que es tedioso. ¿No puedo decirle a restkit que conecte la sala a su trabajo correspondiente a través del key_key job_id en el JSON?
Si quito la propiedad, la línea mapKeyPath:@"job_id"
, y cambiar la última línea de [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
consigo
the entity Room is not key value coding-compliant for the key "job_id".
¿Ha encontrado la manera de conectar correctamente la relación de datos básicos sin tener una propiedad ID redundante junto a la relación real? – thejaz