我有一个使用RestKit和核心数据持久性的iOS应用程序。它从几个不同的端点加载其数据,其中大多数端点将完整的对象图作为嵌套的JSON对象返回。但是其中一个端点将包含外键引用(不是嵌套的JSON)的对象返回到另一个端点的数据。
换句话说(缩写):
[postMapping addAttributeMappingsFromArray:@[ @"postID", ... ]];
// ...
[commentMapping addAttributeMappingsFromArray:@[ ... ]];
[commentMapping addConnectionForRelationship:@"post" connectedBy:@"postID"];
相关的Post
和Comment
实体设置了适当的关系,等等。
这一切都与完全一样,但只有获取帖子的请求在获取评论的请求之前完成。否则,评论将无法与其帖子相关联,因为该帖子尚未被提取和映射。
现在,我通过在获取帖子之前不提取评论来解决这个问题。像
这样的东西- (void)fetchPosts {
[objectManager getObjectsAtPath:@"/posts.json"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
[self fetchComments]; // *now* we can fetch comments
// ...
但我想知道是否有更好的方式?
我想我可能会做类似
的事情 [objectManager.HTTPClient.operationQueue setMaxConcurrentOperationCount:1];
但大部分时间,我做想要并发请求。它只有两个必须连续的请求。
我想我可以设置两个不同的对象管理器(一个执行顺序请求,一个执行并发请求),但我不确定是否有意义。
那么,有没有办法指定应该按顺序处理两个特定的-getObjectsAtPath:...
请求,而其他所有请求都可以随时运行?
答案 0 :(得分:1)
查看创建另一个请求描述符,该描述符深入查看注释详细信息并仅处理postID
属性。对于每个,运行postMapping
以创建存根对象。
请注意,您可能仍会遇到具有2个不同背景上下文的竞争条件,这两个背景上下文同时创建相同的对象,因此您可能需要处理合并问题(这是因为您在讨论多个端点时有多个对象管理器)。