Core data RestKit对象与外键的映射关系

Core data RestKit对象与外键的映射关系,core-data,restkit,Core Data,Restkit,RestKit是否可以在不将外键存储为属性的情况下连接关系,即直接从JSON中的keypath进行连接 特别是,我有一份工作,有很多房间。文件室的JSON不包含作业,而是分别加载: - job: { id: 1, name: "John" } - room: { id: 4, job_id: 1, name: "spare bedroom" } 作业在房间前面加载 我的CoreData模型,作业具有的属性 @interface Job : NSMana

RestKit是否可以在不将外键存储为属性的情况下连接关系,即直接从JSON中的keypath进行连接

特别是,我有一份工作,有很多房间。文件室的JSON不包含作业,而是分别加载:

- job: {
    id: 1,
    name: "John"
}

- room: {
    id: 4,
    job_id: 1,
    name: "spare bedroom"
}
作业在房间前面加载

我的CoreData模型,作业具有的属性

@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
目前我添加了一个
@属性(非原子,强)NSNumber*jobID到房间,我将其合成

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属性就可以做到这一点?我不想在CoreData xcdatamodeld中有jobID属性-这是多余的,因为关系涵盖了这一点

另外,如果我重建NSManagedObjects,我需要重新添加jobID属性,这很繁琐。我不能告诉restkit通过JSON中的Job_id键路径将文件室连接到相应的作业吗

如果删除该属性,请单击
mapKeyPath:@“job_id”
行,并将最后一行更改为
[mapping connectRelationship:@“job”,withObjectForPrimaryKeyAttribute:@“job_id”]我明白了

the entity Room is not key value coding-compliant for the key "job_id".

我将使JobId成为核心数据中的一个瞬时值,并编写一个自定义集并获取它

该集合将把关系设置为self.job=methodToReturnObjectMatchingJobId(rest工具包将使用该关系)

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是一个简单的查询,它根据id返回对象。

这难道不会使Restkit的关系映射变得多余吗?我应该禁用Restkit的映射,或者可能将setClaimId保留为空吗?我所做的是使用映射或claimId,并使用它来设置与Restkit之外的claim对象的关系。因此,在这种情况下,您不会在restKit中为关系创建映射(如果您是这样做的话)。您是否了解了如何在核心数据中正确连接关系,而不在真实关系旁边具有冗余ID属性?