1

我已经与 RestKit 斗争了一个多星期,似乎根本无法理解关系映射......我已经尝试阅读文档和示例,但它似乎没有意义当我尝试在实践中应用它时。

我暂时放弃了我的应用程序并将所有内容简化为一个简单的独立项目,该项目具有以下数据模型: 在此处输入图像描述

  • 一个模板拥有一组节点。
  • 这些节点的子集也可以称为模板内的“链接”。

生成的类如下所示:

@interface Template : NSManagedObject
@property (nonatomic, retain) NSString * guid;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *links;
@property (nonatomic, retain) NSSet *nodes;
@end

@interface Node : NSManagedObject
@property (nonatomic, retain) NSString * desc;
@property (nonatomic, retain) NSString * guid;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Template *template;
@end

我正在尝试使用 RestKit 映射将核心数据模型映射到 JSON,并将 JSON 映射回核心数据。最终会有一个服务器组件,但我也想使用相同的映射来支持将 json 导入/导出到文件。

这是我希望 JSON 如何查找模板的示例:

{"nodes":[
    {"name":"Node 1","guid":"N-0001","desc":"This is the first node"},
    {"name":"Node 2","guid":"N-0002","desc":"This is the second node"},
    {"name":"Node 3","guid":"N-0003","desc":"This is the third node"}
],
"guid":"T-0001",
"name":"Template 1",
"links":["N-0001","N-0002"]
}

以下是我目前正在使用的映射:

self.nodeMapping = [RKEntityMapping mappingForEntityForName:@"Node" inManagedObjectStore:self.rkManagedObjectStore];
[self.nodeMapping addAttributeMappingsFromDictionary:@{
    @"guid": @"guid",
    @"name": @"name",
    @"desc": @"desc"
 }];
[self.nodeMapping setIdentificationAttributes:@[@"guid"]];

self.templateMapping = [RKEntityMapping mappingForEntityForName:@"Template" inManagedObjectStore:self.rkManagedObjectStore];
[self.templateMapping addAttributeMappingsFromDictionary:@{
    @"guid": @"guid",
    @"name": @"name"
 }];
[self.templateMapping setIdentificationAttributes:@[@"guid"]];

[self.templateMapping addRelationshipMappingWithSourceKeyPath:@"nodes" mapping:self.nodeMapping];

这适用于“节点”关系,但我一生都无法弄清楚如何使用 ID 映射链接。

我试过使用

[self.templateMapping addConnectionForRelationship:@"links" connectedBy:@"guid"];

但是当我导入上面的 JSON 时,这只是让 links 属性为空。

我也花了很长时间来搞乱这么多不同形式的关系映射和属性映射,一切都会导致来自 RestKit 的神秘错误,或者根本没有发生任何事情。

有人可以告诉我我需要在这个映射中添加什么才能正确映射链接吗?

然后,我计划使用相同的映射将核心数据模板转储到 JSON。我希望我可以为此使用 [self.templateMapping inverseMapping] - 但我已经放弃了这个,直到我可以让导入映射工作。

谢谢

4

1 回答 1

1

检查 Restkit 对象映射文档中的此部分:映射没有键路径的值

我按照您的 JSON 结构为您提供了一个快速示例:

RKEntityMapping *linkNodeMapping = [RKEntityMapping mappingForEntityForName:@"Node" inManagedObjectStore:self.rkManagedObjectStore];
[linkNodeMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"guid"]];
[linkNodeMapping setIdentificationAttributes:@[@"guid"]];
RKRelationshipMapping *linkNodesRelationshipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"links"
                                                                                              toKeyPath:@"links"
                                                                                            withMapping:linkNodeMapping];
[self.templateMapping addPropertyMapping:linkNodesRelationshipMapping];
于 2013-08-15T16:43:32.503 回答