Core data RestKit对象与外键的映射关系
RestKit是否可以在不将外键存储为属性的情况下连接关系,即直接从JSON中的keypath进行连接 特别是,我有一份工作,有很多房间。文件室的JSON不包含作业,而是分别加载: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
- 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属性?