fla*_*ixx 8 iphone core-data relationships restkit
在GitHub上为RestKit 阅读了Object Mapping-Guide后,我的问题并未消失,所以也许有人可以说RestKit是否可以处理以下想法.
有关系的实体
Company
- unitID
- companyID
- name
- contacts* (Company -->> Contact | 1:n)
Contact
- unitID
- companyID
- contactID
- lastName
- firstName
- account* (Contact >--> Company | 1:1)
Run Code Online (Sandbox Code Playgroud)
JSON(公司)
[
{
"unitID":"003CABD8DEB5DC13C",
"companyID":"BSP-002999",
"name":"Testcompany"
}
]
Run Code Online (Sandbox Code Playgroud)
JSON(联系方式)
[
{
"unitID":"DAC2ACCC125795D00",
"companyID":"BSP-002999",
"contactID":"CLP-015468",
"firstName":"Mister",
"lastName":"Wayne"
}
]
Run Code Online (Sandbox Code Playgroud)
由于限制,我无法将所有联系人嵌套到公司中(否则我不会写这个),所以我想在导入时映射数据时这样做.
是否有可能它是属于公司(由属性标识映射每个联系人companyID进口与RestKit给出的方法)?
如果没有,我想知道最好的解决方案.谢谢!
背景
在我第一次构建此应用程序时,我已将对象映射到给定实体(没有关系),并将所有所有联系人提取到具有谓词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
...
Run Code Online (Sandbox Code Playgroud)
Bla*_*ers 12
是的,RestKit可以在映射时为您保持这种关系.在您的Contact模型的RKManagedObjectMapping上,您需要执行以下操作:
[objectMapping mapRelationship:@"company" withMapping:companyMapping][objectMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];在RestKit完成有效负载的映射之后,它将通过集合传回并保持任何关系.如果有效负载实际创建了您需要满足连接的对象,则处理将延迟到映射之后.
在开发分支上,您可以使用其他工作流程.本周早些时候,我增加了对使用有效载荷中的ID数组来保持多个关系的支持.这样,您就可以在有效负载中发送属于公司的联系人列表.它可能对您的用例更有效.
我发布到RestKit邮件列表的其他详细信息:http://groups.google.com/group/restkit/msg/416951f86b2862d1
| 归档时间: |
|
| 查看次数: |
2558 次 |
| 最近记录: |