Relacje mapowania obiektów RestKit z kluczami obcymi
Czy RestKit może połączyć relację bez przechowywania klucza obcego jako atrybutu, tj. Bezpośrednio z ścieżki w JSON?
W szczególności mam pracę związaną z wieloma pokojami. JSON pokoju nie zawiera zadania, a oba są ładowane oddzielnie:
<code>- job: { id: 1, name: "John" } - room: { id: 4, job_id: 1, name: "spare bedroom" } </code>
Zadanie jest ładowane przed pokojem.
Moje modele CoreData, Job ma właściwości
<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>
Obecnie dodaję@property (nonatomic, strong) NSNumber *jobID;
do pokoju, który ja@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>
Zastanawiałem się, czy jest jakiś sposób, w jaki mogę to zrobić bez dodatkowej własności JobID? Nie chcę mieć atrybutu jobID w CoreData xcdatamodeld - jest to zbędne, ponieważ relacja to obejmuje.
Również jeśli odbuduję obiekty NSManagedObject, muszę ponownie dodać właściwość jobID, co jest nużące. Nie mogę powiedzieć, aby restkit połączył pokój z odpowiadającym mu zadaniem za pomocą keypath job_id w JSON?
Jeśli usunę nieruchomość,mapKeyPath:@"job_id"
i zmień ostatnią linię na[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
dostaję
<code>the entity Room is not key value coding-compliant for the key "job_id". </code>