RestKit 0.2x 同时 RKManagedObjectRequestOperation

Posted

技术标签:

【中文标题】RestKit 0.2x 同时 RKManagedObjectRequestOperation【英文标题】:RestKit 0.2x simultaneous RKManagedObjectRequestOperation 【发布时间】:2014-04-05 11:22:41 【问题描述】:

在使用委托方法的 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】:

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

两种通用解决方案是:

    不要同时运行请求 预先创建所有存根对象,然后填充响应并将它们关联起来

如果您需要明确的顺序,那么您应该使用 AFNetworking 并发执行下载,然后使用 RestKit 映射操作和响应数据并指定它们之间的依赖关系。

【讨论】:

以上是关于RestKit 0.2x 同时 RKManagedObjectRequestOperation的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 0.2x 创建两个独立的持久存储

Restkit 映射 0.2

Restkit 0.20.x cocoapods 安装问题 - 编译但找不到 RestKit 的导入

如何在 RESTkit 0.2 中设置缓存策略

使用 RestKit 0.2 从 CoreData 获取本地数据

RestKit 0.2:扁平化 JSON 中的层次结构