Relações de mapeamento de objetos RestKit com chaves estrangeiras
O RestKit pode conectar um relacionamento sem armazenar a chave estrangeira como um atributo, ou seja, diretamente do caminho-chave no JSON?
Em particular, eu tenho um relacionamento de trabalho has_many Rooms. O JSON da sala não contém o trabalho, em vez disso, ambos são carregados separadamente:
<code>- job: { id: 1, name: "John" } - room: { id: 4, job_id: 1, name: "spare bedroom" } </code>
O trabalho é carregado antes da sala.
Meus modelos CoreData, Job tem propriedades para
<code>@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 </code>
Atualmente eu adiciono um@property (nonatomic, strong) NSNumber *jobID;
para o quarto, que eu@synthesize
.
<code>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"]; </code>
Eu queria saber se há uma maneira de fazer isso sem a propriedade jobID extra? Eu não quero ter um atributo jobID no CoreData xcdatamodeld - é redundante, pois o relacionamento cobre isso.
Além disso, se eu reconstruir os NSManagedObjects, eu preciso adicionar novamente a propriedade jobID, que é entediante. Não posso dizer ao kit de descanso para conectar a sala ao seu trabalho correspondente através do caminho_chave job_id no JSON?
Se eu remover a propriedade,mapKeyPath:@"job_id"
linha e mude a última linha para[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
eu recebo
<code>the entity Room is not key value coding-compliant for the key "job_id". </code>