我应该如何将Core Data实体与RestKit结合使用?

问题描述

| 我有两个Core Data实体(
Client
UserFile
),它们之间已经成功建立了关系。 我为两个实体都创建了类,并将它们设为
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
为空白)。 似乎我必须分配ѭ7来防止创建新的空ѭ0并将其与文件关联(需要客户关系)。 它是否正确?我真的必须同时分配外键和实际实体吗?对我来说,这似乎有点多余,但是我很高兴地承认我缺乏Core Data和RestKit的知识!     

解决方法

要回答您的问题,目前看来您确实需要同时执行两个步骤。这是库随附的RKDiscussionBoardExample中的代码:
DBTopic* topic = [[DBTopic findFirstByAttribute:@\"topicID\" withValue:topicID] retain];
_post = [[DBPost object] retain];
_post.topicID = topic.topicID;
_post.topic = topic;
因此,在示例中关系可能未正确设置,或者您确实需要两个步骤。 此外,您应该使用RestKit的最新版本,该版本具有不同的对象映射器,并且不建议使用RKManagedObject。您的关系应如下所示:
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\",nil];

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