Может ли RestKit связать связь без сохранения внешнего ключа в качестве атрибута, то есть непосредственно из ключевого пути в JSON?
В частности, у меня есть отношение Job has_many Rooms. Комната JSON не содержит задания, скорее, оба загружаются отдельно:
- job: {
id: 1,
name: "John"
}
- room: {
id: 4,
job_id: 1,
name: "spare bedroom"
}
Задание загружается перед комнатой.
Мое модели CoreData, Job имеет свойства для
@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
В настоящее время я добавляю @property (nonatomic, strong) NSNumber *jobID;
в комнату, который я @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"];
Мне было интересно, есть ли способ, которым я могу это сделать без дополнительного свойства jobID? Я не хочу иметь атрибут jobID в CoreData xcdatamodeld - он избыточный, поскольку отношения охватывают это.
Также, если я перестрою NSManagedObjects, мне нужно повторно добавить свойство jobID, которое является утомительным. Не могу ли я сообщить restkit для подключения комнаты к соответствующему заданию с помощью ключевого пути job_id в JSON?
Если я удалю свойство, строку mapKeyPath:@"job_id"
и изменим последнюю строку на [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
, я получаю
the entity Room is not key value coding-compliant for the key "job_id".