Подтвердить что ты не робот

RelKit Object Сопоставление отношений с внешними ключами

Может ли 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".
4b9b3361

Ответ 1

Я бы сделал JobId переходным значением в основных данных и написал пользовательский набор и получил для него.

Набор установил отношение к self.job = methodToReturnObjectMatchingJobId (это будет использоваться комплектом отдыха)

Get вернет self.job.identifier

Если вы не используете mogenerator, я бы предложил вам просмотреть его для всех ваших основных потребностей в данных.

Ниже приведен пример кода, как я это сделал:

-(void) setClaimId:(NSNumber *)claimId{
     Claim *propertyClaim=[Claim listItemFromId:[claimId intValue] withContext:self.managedObjectContext]; 

    self.claim=propertyClaim; 
}
-(NSNumber*) claimId{

  return self.claim.referenceId;
}

где listItemFromId - это простой запрос, который возвращает объект на основе идентификатора.