我应该如何关联核心数据实体以用于RestKit?

问题描述:

我有两个核心数据实体(ClientUserFile),我已成功建立关系。我应该如何关联核心数据实体以用于RestKit?

我已经为两个实体创建了类,并使它们成为RKManagedObject的子类。

当我创建新的UserFile时,我想正确地将它与Client关联。下面是我在做什么:

Client *client = [Client objectWithPrimaryKeyValue:@"1"]; 
UserFile *file = [UserFile object]; 
file.client = client; 
file.clientId = client.clientId; 
[[RKObjectManager sharedManager] postObject:file delegate:self]; 

好像我必须分配file.clientId,使正确的参数发送到服务器(如果我只分配file.client然后提交client_id为空)。

看来我必须分配file.client来防止创建一个新的空的Client并与文件关联(需要客户关系)。

这是正确的吗?我真的必须分配外键和实际的实体吗?这对我来说似乎有点多余,但我会高兴地承认我的核心数据和RestKit知识缺乏!

+0

你可能会发布编辑问题并添加你的 - (NSDictionary *)elementToPropertyMappings实现。 – ugiflezet 2011-06-30 08:53:50

要回答你的问题,看起来你现在确实需要这两个步骤。下面是来自RKDiscussionBoardExample包括在库中的代码:

DBTopic* topic = [[DBTopic findFirstByAttribute:@"topicID" withValue:topicID] retain]; 
_post = [[DBPost object] retain]; 
_post.topicID = topic.topicID; 
_post.topic = topic; 

所以,无论是关系不正确设置的例子,或者你真的需要两个步骤。

此外,您应该使用具有不同对象映射器并弃用RKManagedObject的RestKit的最新版本。你的关系应该是这样的:

RKManagedObjectMapping* clientMapping = [RKManagedObjectMapping mappingForClass: [Client class]]; 
clientMapping.primaryKeyAttribute = @"clientID"; 
[clientMapping mapKeyPathsToAttributes: 
@"id", @"clientID", 
nil]; 

RKManagedObjectMapping* userFileMapping = [RKManagedObjectMapping mappingForClass:[UserFile class]]; 
userFileMapping.primaryKeyAttribute = @"userFileID"; 
[userFileMapping mapKeyPathsToAttributes: 
@"id", @"userFileID", 
@"client_id", @"clientID", 
nil]; 

[userFileMapping mapRelationship:@"client" withObjectMapping:clientMapping];