我应该如何关联核心数据实体以用于RestKit?
问题描述:
我有两个核心数据实体(Client
和UserFile
),我已成功建立关系。我应该如何关联核心数据实体以用于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知识缺乏!
答
要回答你的问题,看起来你现在确实需要这两个步骤。下面是来自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];
你可能会发布编辑问题并添加你的 - (NSDictionary *)elementToPropertyMappings实现。 – ugiflezet 2011-06-30 08:53:50