【问题标题】:Calling two webservices at the same time using RestKit使用 RestKit 同时调用两个 web 服务
【发布时间】:2014-06-23 12:32:52
【问题描述】:

您好,我是第一次使用 Restkit 并且能够正确调用 Web 服务,但是有一种情况是我必须在我的一个视图控制器上调用两个 Web 服务才能从服务器获取所需的所有数据 例如:我有一项服务提供 userProfile 数据,第二项服务我必须调用 userLevelType

现在我正在调用第一个 web 服务,当我获得该数据时它给了我 useprofile 我正在调用第二个 web 服务 userLevelType 但我想同时调用这两个服务

有什么方法可以实现一次调用两个不同的web服务。

我正在使用 RKobjectRequestOperation 来调用 web 服务,所以是否可以创建队列或其他一些我不知道的解决方案

感谢您的帮助。

【问题讨论】:

  • RestKit 已经有一个队列。显示您当前如何执行请求操作的代码。

标签: ios objective-c web-services restkit


【解决方案1】:

您正在处理一个异步系统,该系统正在访问基于网络的资源。 “同时”几乎是不可能的。

RestKit 将按照您给它们的顺序排列请求。

如果您的请求是顺序相关的,您需要像这样通过完成块将它们链接在一起。

RequestOperationSucessBlock successblock = ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){

        [self runNextRequestWhichIsDependantOnDataFromThisRequest];

    };

RequestOperationFailBlock failureblock = ^(RKObjectRequestOperation *operation,  NSError *error){

        //deal with failure

    };


[[RKObjectManager sharedManager] getObjectsAtPath:@"my/path" parameters:someParams success:successblock failure:failureblock];

如果它们不依赖,请在两个成功块中使用条件来继续您的流程。

RequestOperationSucessBlock successblock = ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){

        if(theOtherOperationHasCompleted) {

           [self carryOnWithFlowNowThatBothOperationsAreDone];
        }

    };

【讨论】:

  • 这不是真的。计算机一直在执行多项任务。 OP 也直接使用 RK 操作,而不是使用对象管理器。
  • True ,ios 执行多任务。但是同时接收到两个独立的网络回叫的可能性很小。 OP不应该依赖这种情况。实际上会得到 0 到 2 个响应。
  • 更好地描述为:请求可以同时运行而不是顺序运行,但不要依赖于每个请求何时完成的任何事情。 RestKit 不会按照请求的顺序将请求排队以完成(除非您将其配置为)。
【解决方案2】:

使用对象管理器来控制您处理的请求操作。使用enqueueObjectRequestOperation: 将处理传递给对象管理器。访问对象管理器的operationQueue,这样您就可以调用setMaxConcurrentOperationCount: 来限制正在运行的并发进程的数量(实际上任何时候都不应该超过4 或5 个)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多