【问题标题】:How should I be associating Core Data entities for use with RestKit?我应该如何关联 Core Data 实体以与 RestKit 一起使用?
【发布时间】:2011-09-02 07:11:52
【问题描述】:

我有两个核心数据实体(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 知识!

【问题讨论】:

  • 您能否发布编辑问题并添加您的 - (NSDictionary*)elementToPropertyMappings 实现。

标签: ios cocoa core-data restkit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多