【问题标题】:RestKit Core Data mapping connection with foreign key in the URLRestKit Core Data 映射连接与 URL 中的外键
【发布时间】:2013-05-20 00:55:47
【问题描述】:

我有一个带有两个端点的 API:

/projects

{
  project_list:[{"project_id": 1, "project_name": "Ben"},
                {"project_id": 2, "project_name": "Jerry"}]
}

/projects/1/members

{
  member_list:[{"member_id": 1, "member_name": "Ben"},
               {"member_id": 2, "member_name": "Jerry"}]
}

一个项目有多个成员,一个成员有一个项目。我正在使用 RestKit 0.20.1 将这些映射到核心数据存储。

当前代码:

// ###############################
// ## Configure Project mapping ##
// ###############################
RKEntityMapping *projectMapping = [RKEntityMapping mappingForEntityForName:@"Project" inManagedObjectStore:managedObjectStore];
projectMapping.identificationAttributes = @[ @"projectId" ];
[projectMapping addAttributeMappingsFromDictionary:@{ @"project_id": @"projectId",
                                                    @"project_name": @"projectName"}];

RKResponseDescriptor *projectDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:projectMapping pathPattern:nil keyPath:@"project_list" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[manager addResponseDescriptorsFromArray:@[ projectDescriptor ]];

// ##############################
// ## Configure Member mapping ##
// ##############################
RKEntityMapping *memberMapping = [RKEntityMapping mappingForEntityForName:@"Member" inManagedObjectStore:managedObjectStore];
memberMapping.identificationAttributes = @[ @"memberId" ];
[memberMapping addAttributeMappingsFromDictionary:@{ @"member_id": @"memberId",
                                                   @"member_name": @"memberName"}];

RKResponseDescriptor *memberDescriptior = [RKResponseDescriptor responseDescriptorWithMapping:memberMapping pathPattern:nil keyPath:@"member_list" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[manager addResponseDescriptorsFromArray:@[ memberDescriptor ]];

我最接近的是这些示例:http://restkit.org/api/latest/Classes/RKConnectionDescription.html,但它们取决于 JSON 响应中的外键。

当项目外键在 URL 中且在检索成员时未在 JSON 数据中返回时,如何连接这些?

【问题讨论】:

    标签: ios objective-c core-data restkit restkit-0.20


    【解决方案1】:

    您可以使用链接参考中描述的外键,您只需要获取它...

    要获得它,您需要使用路径模式和元数据映射。您还想使用RKRoute,因为它对路径模式做了很多工作。

    定义你的路径模式,如:

    projects/:identity/members
    

    然后在您的映射中,您可以定义外键来获取它:

    @"@metadata.routing.parameters.identity": @"foreignKey",
    

    请参阅RKObjectManager docs 的“元数据映射”部分。

    【讨论】:

    • 感谢您的回复。 foreignKey 似乎是我的 Member 类的一个属性。但是我只有一个带有真实 Account 对象的 Core Data 对象关系属性,而不是 accountId 属性。我是否需要创建它并在 Project 对象上有冗余数据?
    • 是的,您需要创建它。您应该能够将其设为瞬态,因此它实际上不会被持久化到您的数据库中。
    • 是否有权限查看最终源代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多