RestKit 0.2x同步RKManagedObjectRequestOperation

时间:2014-04-05 11:22:41

标签: core-data restkit afnetworking restkit-0.20 rkobjectmapping

在使用委托方法的RestKit 0.10.3中,我能够发送同步的GET请求,即使每个请求的映射是按顺序执行的。我有GET请求,需要很多时间才能收到响应,所以我想同时发送所有请求但尊重映射中的顺序(我有跨越三个请求的关系)。我需要的是:

  

1)发送GET请求n。 1,发送GET请求n。 2,发送GET请求n。 3

     

2)一收到响应1就开始映射请求1

     

3)当响应1的映射完成时,等待响应2并映射   (或者如果已经收到则开始映射)

     

4)当响应2的映射完成时,等待响应3并映射   (或者如果已经收到则开始映射)

似乎发生了什么(如果objectManeger上的operationQueue未设置为1):

  

1)发送GET请求n。 1,发送GET请求n。 2,发送GET请求n。 3

     

2)收到后立即映射回复,之前的映射已完成

问题1:是否可以尊重映射中的订单?

问题2:可以同时发生更多响应(第2点)的映射吗?换句话说,这是否可能:

  

1)发送GET请求n。 1,发送GET请求n。 2

     

2)开始映射响应1

     

3)开始映射响应2

     

4)映射响应1结束

     

5)映射响应2结束

如果无法做到这一点,我会有一个“半”解决方案:将每个请求排入willMapDeserializedResponseBlock。请求不会同时发送,但至少我可以在上一次映射之前发送每个请求。

问题3:如果我在交叉关系的两边复制了entityMappings的“addConnectionForRelationship”,那么三个映射应该同时执行,顺序不再重要。这是否可能,而不会产生一些邪恶的行为(重复的对象,孤立的对象,缺少关系,低性能)??

我疯了吗? :d

1 个答案:

答案 0 :(得分:0)

如果您没有数据库中的现有对象,那么在后台同时运行多个操作将导致问题,因为您将尝试连接或防止不同线程中多个上下文之间的重复。

2个通用解决方案是:

  1. 不要同时运行请求
  2. 预先创建所有存根对象,然后填充响应并将它们关联起来
  3. 如果您需要明确订单,则应使用AFNetworking同时执行下载,然后将RestKit映射操作与响应数据一起使用,并指定它们之间的依赖关系。