如何使用RestKit 0.2和Core Data在未嵌入的JSON对象和关系之间添加映射?

Mar*_* S. 3 cocoa-touch json core-data ios restkit

我正在开发我的第一个使用RestKit 0.2和Core Data的iOS应用程序.大部分时间我都遵循这个伟大的教程http://www.alexedge.co.uk/blog/2013/03/08/introduction-restkit-0-20/ 但是它不符合我的要求,因为它描述了嵌入式JSON对象和我需要创建单独的对象.以下是我的应用结构的简化方案:

JSON响应:

"application": [
    {
        "appId": "148",
        "appName": …
.
.
.
(more attributes)
    }
],
"image": [
    {
        "imgId": "308",
        "appId": "148",
        "iType": "screenshot",
        "iPath": ..
.
.
.
    },
    {
        "imgId": "307",
        "appId": "148",
        "iType": "logo",
        "iPath": …
.
.
.
    }
]
Run Code Online (Sandbox Code Playgroud)

我创建了一个包含两个实体的数据模型,并以一个应用程序可能有多个图像而一个图像可能只属于一个应用程序的方式设置它们之间的关系:

在此输入图像描述

我使用了mogenerator来创建实体代表的类.

我可以使用以下代码将实体成功映射到Application对象:

NSDictionary *parentObjectMapping = @{
                                      @"appId" : @"appId"
                                      };


// Map the Application object
RKEntityMapping *applicationMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([Application class]) inManagedObjectStore:managedObjectStore];
applicationMapping.identificationAttributes = @[ @"appId" ];
[applicationMapping addAttributeMappingsFromDictionary:@{
 @"appName" : @"name",
 @"appCat" : @"category",
 @"appType" : @"type",
 @"compName" : @"companyName",
 @"compWeb" : @"companyWebsite",
 @"dLink" : @"downloadWebLink",
 @"packageName" : @"appStoreLink",
 @"osMinVer" : @"minRequirements",
 @"appCost" : @"cost",
 @"appDescription" : @"appDescription"
 }];

[applicationMapping addAttributeMappingsFromDictionary:parentObjectMapping];

 // Register our mappings with the provider
 [manager addResponseDescriptorsFromArray:@[

 [RKResponseDescriptor responseDescriptorWithMapping:applicationMapping
 pathPattern:nil
 keyPath:@"application"
 statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]
 ]];
Run Code Online (Sandbox Code Playgroud)

现在,在使用Image和Application之间的适当关系将JSON映射到图像对象时,我遇到了问题.如何在两个实体之间添加映射?我的数据模型是正确的还是我遗漏了什么?

Wai*_*ain 5

您希望使用外键映射来允许RestKit连接对象.

你需要添加一个图像映射,它应该有一个属性来保存appId.然后,您需要添加连接关系:

[imageMapping addConnectionForRelationship:@"application" connectedBy:@{ @"appId": @"appId" }];
Run Code Online (Sandbox Code Playgroud)

这告诉RestKit使用appId图像实例上的属性连接到具有相应的应用程序实例,appId并将结果保存在application关系中.