gpt4 book ai didi

iphone - 没有 KVC 的 RestKit 对象映射关系

转载 作者:行者123 更新时间:2023-12-03 18:35:18 25 4
gpt4 key购买 nike

阅读 Object Mapping-Guide on GitHub 后对于 RestKit 我的问题并没有消失,所以也许有人可以说 RestKit 是否可以处理以下想法。

有关系的实体

 Company 
- unitID
- companyID
- name
- contacts* (Company -->> Contact | 1:n)

Contact
- unitID
- companyID
- contactID
- lastName
- firstName
- account* (Contact >--> Company | 1:1)

JSON(公司)

 [
{
"unitID":"003CABD8DEB5DC13C",
"companyID":"BSP-002999",
"name":"Testcompany"
}
]

JSON(联系人)

 [
{
"unitID":"DAC2ACCC125795D00",
"companyID":"BSP-002999",
"contactID":"CLP-015468",
"firstName":"Mister",
"lastName":"Wayne"
}
]

由于限制,我无法将所属联系人嵌套到公司中(否则我不会写这个),所以我想在导入时映射数据时执行此操作。

问题

是否可以在导入时使用 RestKit 给定的方法将每个联系人映射到其所属公司(由属性 companyID 标识)?

如果没有,我想知道最好的解决方案。谢谢!

<小时/>

背景

在这个应用程序的第一个版本中,我已将对象映射到给定实体(没有关系),并使用谓词companyID = %@ 获取公司的所有所属联系人。由于数据量很大(4000 多家公司,7000 多个联系人),获取所有所属联系人大约需要一秒钟 - 因此我想到了使用关系的想法(这与本地虚拟数据完美配合)。

<小时/>

解决方案

在下面给出的答案的帮助下,我当前的映射如下所示(RestKit v.10)。

// Setting up Restkit with objectStore
...

// Init objectMapping for Class Company
companyMapping = [RKManagedObjectMapping mappingForClass:[Company class] inManagedObjectStore:objectStore];
[companyMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[companyMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[companyMapping mapKeyPath:@"name" toAttribute:@"name"];
companyMapping.setDefaultValueForMissingAttributes = NO;
companyMapping.primaryKeyAttribute = @"companyID";

// Init objectMapping for Class Contact
contactMapping = [RKManagedObjectMapping mappingForClass:[Contact class] inManagedObjectStore:objectStore];
[contactMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[contactMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[contactMapping mapKeyPath:@"contactID" toAttribute:@"contactID"];
[contactMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];
[contactMapping mapKeyPath:@"firstName" toAttribute:@"firstName"];
contactMapping.setDefaultValueForMissingAttributes = NO;
contactMapping.primaryKeyAttribute = @"contactID";

// Init relationships
[contactMapping mapRelationship:@"company" withMapping:companyMapping];
[contactMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

// Get objects from server
...

最佳答案

是的,RestKit 可以在映射时为您补充这种关系。在联系人模型的 RKManagedObjectMapping 上,您需要执行以下操作:

  • 添加到父公司的关系映射:[objectMapping mapRelationship:@"company"withMapping:companyMapping]
  • 将 companyID 属性映射到您的联系人模型
  • 确保您已在两个类上配置了primaryKeyAttribute
  • 指示 RestKit 水合关系:[objectMapping connectRelationship:@"company"withObjectForPrimaryKeyAttribute:@"companyID"];

RestKit 完成有效负载映射后,它将通过集合传回并合并所有关系。如果有效负载实际创建了满足连接所需的对象,则处理会推迟到映射之后。

在开发分支上,您可以使用替代工作流程。本周早些时候,我添加了对使用负载中的 ID 数组来维持多对多关系的支持。这将允许您发送属于有效负载中的公司的联系人列表。对于您的用例来说,它可能更有效。

我在 RestKit 邮件列表中发布的帖子的其他详细信息:http://groups.google.com/group/restkit/msg/416951f86b2862d1

关于iphone - 没有 KVC 的 RestKit 对象映射关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com