11

我有两个核心数据实体 (ClientUserFile),我已经成功地在它们之间建立了关系。

我为这两个实体创建了类,并将它们设为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 知识!

4

1 回答 1

9

要回答您的问题,您目前似乎确实需要执行这两个步骤。这是库中包含的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];
于 2011-07-04T18:45:48.477 回答