Czy RestKit może łączyć relację bez zapisywania klucza obcego jako atrybutu, tj. Bezpośrednio z keypath w JSON?RestKit Object Relacje mapujące z kluczami obcymi
W szczególności mam związek Job ma wiele pokoi. JSON pomieszczenia nie zawiera zadania, ale oba są ładowane osobno:
- job: {
id: 1,
name: "John"
}
- room: {
id: 4,
job_id: 1,
name: "spare bedroom"
}
Praca jest ładowana przed salą.
Moi CoreData modele Job ma właściwości
@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
Obecnie dodaję @property (nonatomic, strong) NSNumber *jobID;
do pokoju, który ja @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"];
Zastanawiałem się, czy istnieje sposób mogę to zrobić bez dodatkowych własności jobid? Nie chcę mieć atrybut jobID w CoreData xcdatamodeld - jest zbędny, ponieważ relacja obejmuje to.
Również jeśli odbuduję obiekty NSManagedObjects, muszę ponownie dodać właściwość jobID, co jest uciążliwe. Czy nie mogę nakazać restkitowi połączenia pokoju z odpowiadającym mu zadaniem za pośrednictwem keypath job_id w JSON?
Jeśli usunąć właściwość, linię mapKeyPath:@"job_id"
i zmień ostatnią linię do [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
uzyskać
the entity Room is not key value coding-compliant for the key "job_id".
Czy dowiedziałeś się, jak prawidłowo połączyć relację w danych podstawowych bez posiadania właściwości redundantnej obok rzeczywistej relacji? – thejaz