RestKit对象与外键的映射关系
RestKit可以连接关系而不将外键存储为属性,即直接来自JSON中的键路径?RestKit对象与外键的映射关系
特别是,我有一个工作has_many房关系。房间的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
性质目前我添加了一个@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"];
我在想,如果有一种方法,我可以做到这一点没有额外的作业ID属性?我不想在CoreData xcdatamodeld中有一个jobID属性 - 它是多余的,因为关系覆盖了这个属性。
此外,如果我重建NSManagedObjects,我需要重新添加jobID属性,这是乏味的。我不能通过JSON中的job_id keypath来告诉restkit将Room连接到相应的Job吗?
如果我删除的特性,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(这可以由其他套件配合使用)
如果你不使用mogenerator的get将返回self.job.identifier
,我建议你看看它的所有核心数据需求。
下面是我是如何做到的示例代码:
-(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保持空白? – geon 2013-03-08 10:54:49
我正在做的是使用映射或claimId并使用它将关系设置为在restKit之外声明对象。因此,在这种情况下,您不会在restKit中为关系创建映射(如果这是您的工作方式)。 – 2013-03-10 13:25:39
您是否已经发现如何正确连接核心数据中的关系,而没有在真实关系旁边具有冗余ID属性? – thejaz 2013-05-24 14:24:32