延迟加载远程数据(RestKit 和 CoreData)
Posted
技术标签:
【中文标题】延迟加载远程数据(RestKit 和 CoreData)【英文标题】:Late Loading of remote Data (RestKit and CoreData) 【发布时间】:2012-04-04 17:37:47 【问题描述】:我在这个问题上工作了很长时间,但找不到解决方案 适合我的需要。
问题是,我如何加载数据并将它们映射到关系 无需加载整个结构
简单示例:
我们得到了一些鸟:
"birds":[
"bird":"id":"1","value":"LaLeLu",
"bird":"id":"2","value":"LeLeLa",
...
]
这可以通过以下方式映射:
RKManagedObjectMapping *birdMapping = [RKManagedObjectMapping
mappingForClass:[Bird class]];
menuMapping.primaryKeyAttribute = @"identifier";
[menuMapping mapKeyPath:@"value" toAttribute:@"value"];
[menuMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[[[RKObjectManager sharedManager] mappingProvider]
setMappingForKeyPath:"birds.bird"];
现在效果很好。
现在每只鸟都可以有很多 cmets - 但我不想加载 所有这些 cmets 都带有第一个请求。
当用户点击特定的鸟时,评论应该会被加载。
所以我请求:
NSString *resourcePath = [NSString stringWithFormat:@"/birds/%@/
comments", myBird.id]
[[RKObjectManager sharedManager]
loadObjectsAtResourcePath:resourcePath];
我可以更改它符合 RestKit 需求的响应 - 但是 有什么需求?
"comments":[
"comment""id":"1","value":"Comment1","bird_id":"1"
]
现在我不知道如何映射此响应。
绘制与鸟类没有任何关系的 cmets 是没有问题的:
RKManagedObjectMapping *commentMapping = [RKManagedObjectMapping
mappingForClass:[Comment class]];
menuMapping.primaryKeyAttribute = @"identifier";
[menuMapping mapKeyPath:@"value" toAttribute:@"value"];
[menuMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[[[RKObjectManager sharedManager] mappingProvider]
setMappingForKeyPath:"comments.comment"];
希望有人理解我的问题并能提供帮助
【问题讨论】:
【参考方案1】:对于所有对解决方案感兴趣的人:
RestKit 0.10.0 修复问题:
RKManagedObjectMapping *commentMapping = [RKManagedObjectMapping
mappingForClass:[Comment class]];
commentMapping.primaryKeyAttribute = @"identifier";
[commentMapping mapKeyPath:@"value" toAttribute:@"value"];
[commentMapping mapKeyPath:@"id" toAttribute:@"identifier"];
// Here starts the relevant part:
[commentMapping mapKeyPath:@"bird_id" to Attribute:@"bird_id"];
[commentMapping mapRelationship:@"bird" withMapping:birdMapping];
[commentMapping connectRelationship:@"bird" withObjectPropertyForPrimaryKeyAttribute:"bird_id"]
[[[RKObjectManager sharedManager] mappingProvider]
setMapping:commentMapping ForKeyPath:"comments.comment"];
【讨论】:
以上是关于延迟加载远程数据(RestKit 和 CoreData)的主要内容,如果未能解决你的问题,请参考以下文章