iOS版:等待API完成Block和返回结果(iOS: Waiting for API Comple

2019-10-20 02:15发布

使用继承。

我有一个调用运行调用服务器API父类的方法的子类。

-(IBAction)buttonPressed
{
    [self methodInParentClassThatCallsTheAPI:param];
    // This is where I would like the call back
     if (success from the server API) // do something with the UI
     else if (failure from the server API) // do so something else with the UI
}

父类:

- (void)methodInParentClassThatCallsTheAPI:(NSString *)param
{
      //The method below calls the server API and waits for a response.  
      [someServerOperation setCompletionBlockWithSuccess:^(param, param){
        // Return a success flag to the Child class that called this method
      } failure:^(param, NSError *error){
        // Return a failure flag to the Child class that called this method
      }
}

我怎样才能用块做到这一点? 有没有更好的办法不是块做其它? 代码示例请

Answer 1:

创建一个完成块methodInParentClass是这样的:

- (void)methodInParentClassThatCallsTheAPI:(NSString *)param completionBlock:(void (^)(BOOL success))completionBlock;

然后火了,像这样适当的值拦网成功/失败里面:

completionBlock(YES);

编辑:顺便说一句,请注意,回报可能不是主线程,所以如果你打算做你可以用一个dispatch_async火归挡到UI更新(dispatch_get_main_queue,^ {});

EDIT2:既然你似乎表明这是一个按钮,水龙头的结果,如果你的孩子是一个VC等待返回只记得此块将返回异步(很明显,因为这就是它是专为),所以如果你需要保持用户无论出于何种原因,您需要具备的主要线索显示某种类型的负载指示,并保存用户输入事件。 只要记住,如果你不这样做的UI将继续响应时完成块大火之前,所以至少是你将要禁用按钮,以便用户不能多按它,然后你可以重新启用它,当完成从孩子VC块火灾。

EDIT3:确定这里是调用代码。

-(IBAction)buttonPressed
{
    [self methodInParentClassThatCallsTheAPI:param withCompletionBlock:^(BOOL success){
        if (success) {
          // do something with the UI
        } else {
            // Do something else
        }
    }];
}


文章来源: iOS: Waiting for API Completion Block and returning the result