Kann RestKit eine Beziehung verbinden, ohne den Fremdschlüssel als Attribut zu speichern, d. H. Direkt vom Schlüsselpfad im JSON?RestKit Object Zuordnung von Beziehungen mit Fremdschlüsseln
Insbesondere habe ich eine Job has_many Rooms Beziehung. Das JSON Zimmer nicht den Job enthält, vielmehr sind beide separat geladen:
- job: {
id: 1,
name: "John"
}
- room: {
id: 4,
job_id: 1,
name: "spare bedroom"
}
Der Job wird vor dem Raum geladen.
Meine Coredata-Modelle, hat Job Eigenschaften für
@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
Zur Zeit füge ich ein @property (nonatomic, strong) NSNumber *jobID;
zu Zimmer, das ich @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"];
ich mich gefragt, ob es einen Weg gibt ich dies ohne die zusätzliche jobID Eigenschaft tun? Ich möchte kein JobID-Attribut im CoreData xcdatamodel haben - es ist redundant, da die Beziehung das abdeckt.
Auch wenn ich die NSManagedObjects neu erstellen, muss ich die JobID-Eigenschaft neu hinzufügen, was mühsam ist. Kann ich Restkit nicht mitteilen, dass der Raum über den Schlüsselpfad job_id im JSON mit dem entsprechenden Job verbunden werden soll?
Wenn ich die Eigenschaft entfernen, die mapKeyPath:@"job_id"
Linie, und ändern Sie die letzte Zeile zu [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
ich
the entity Room is not key value coding-compliant for the key "job_id".
Haben Sie herausgefunden, wie Sie die Beziehung in Core Data richtig verbinden können, ohne eine redundante ID-Eigenschaft neben der echten Beziehung zu haben? – thejaz