我有一个iOS应用程序,它使用带有核心数据持久性的RestKit。它从几个不同的端点加载数据,其中大多数端点作为嵌套的JSON对象返回完整的对象图。但是其中一个端点返回的对象包含对另一个端点数据的外键引用(而不是嵌套的JSON)。
换句话说(缩写):
[postMapping addAttributeMappingsFromArray:@[ @"postID", ... ]];
// ...
[commentMapping addAttributeMappingsFromArray:@[ ... ]];
[commentMapping addConnectionForRelationship:@"post" connectedBy:@"postID"];
其中相关的CCD_ 1和CCD_。
这一切都能正常工作,但前提是提取帖子的请求在获取评论的请求之前完成。否则,评论将不会连接到其帖子,因为该帖子尚未被提取和映射。
现在,我只是在帖子被获取之前不获取评论。类似的东西
- (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:...
请求应该按顺序处理,而其他所有请求都可以随时运行?
看看创建另一个请求描述符,它深入到注释详细信息中,只处理postID
属性。对于每一个,运行postMapping
来创建一个存根对象。
请注意,您可能仍然会遇到两个不同背景上下文同时创建相同对象的竞争条件,因此您可能需要处理合并问题(如果您在谈到多个端点时有多个对象管理器)。