RestKit Object Mapping отношения с внешними ключами

Может ли RestKit соединить отношения, не сохраняя внешний ключ в качестве атрибута, то есть непосредственно из пути к ключу в JSON?

В частности, у меня есть отношения Job has_many Rooms. JSON комнаты не содержит задания, скорее, оба загружаются отдельно:

<code>- job: {
    id: 1,
    name: "John"
}

- room: {
    id: 4,
    job_id: 1,
    name: "spare bedroom"
}
</code>

Работа загружается до комнаты.

Мои модели CoreData, Job имеет свойства для

<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>

В настоящее время я добавляю@property (nonatomic, strong) NSNumber *jobID; в комнату, которую я@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>

I was wondering if there's a way I can do this without the extra jobID property?  Я не хочу иметь атрибут jobID в CoreData xcdatamodeld - он является избыточным, поскольку взаимосвязь покрывает это.

Также, если я перестраиваю NSManagedObjects, мне нужно повторно добавить свойство jobID, что утомительно. Могу ли я сказать restkit подключить комнату к соответствующему заданию через путь к файлу job_id в JSON?

Если я удалю собственность, тоmapKeyPath:@"job_id" и измените последнюю строку на[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"]; я получил

<code>the entity Room is not key value coding-compliant for the key "job_id".
</code>
 thejaz24 мая 2013 г., 16:24
Вы узнали, как правильно связать отношения в Базовых данных, не имея избыточного свойства идентификатора рядом с реальными отношениями?

Ответы на вопрос(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 - это простой запрос, который возвращает объект на основе идентификатора.

 10 мар. 2013 г., 14:25
То, что я делаю, - это использование сопоставления или ApplicId и использование его для установки отношения для запроса объекта за пределами restKit. Так что в этом случае у вас не будет отображения в restKit для отношений (если вы так делаете).
 08 мар. 2013 г., 11:54
Разве это не делает избыточным отображение взаимосвязей Restkit? Должен ли я отключить сопоставление Restkit или, возможно, оставить setClaimId пустым?

Ваш ответ на вопрос