在方法中停止执行以调用另一个方法然后继续

时间:2012-12-12 06:46:45

标签: objective-c

在objective-c中,处理这种情况的最佳方法是什么。在我对远程API的所有调用中,我需要确保我先拥有令牌。如果可能的话,我宁愿不在每次通话前检查令牌。

DO NOT WANT TO DO THIS FOR EVERY API CALL!
#if (token) { 
   makeGetForTweetsRequestThatRequiresToken
 }

如果我需要一个令牌,也许它已过期,那个调用可能需要一些时间才能返回,所以我需要在下一次API调用之前等待它返回。是否可以执行以下操作?

[thing makeGetForTweetsRequestThatRequiresToken];


-(void)makeGetForTweetsRequestThatRequiresToken {
      if(nil == token) {

         // make another API call to get a token and save it
         // stop execution of the rest of this method until the
         // above API call is returned.

      } 

      //Do the makeGetForTweetsRequestThatRequiresToken stuff
}

1 个答案:

答案 0 :(得分:1)

我认为您的令牌API会有回调。您可以注册一个块来处理TweetsRequest API的回调:

typedef void (^TokenRequestCompletionHandler)(BOOL success, NSString *token);

-(void) requestTokenCompletionHandler:(TokenRequestCompletionHandler)completionHandler
{
    //Call your token request API here.
    //If get a valid token, for example error==nil
    if (!error) {
        completionHandler(YES,token);
    } else {
        completionHandler(NO,token);
    }
}

在你的推文请求中:

-(void)makeGetForTweetsRequestThatRequiresToken {
  if(nil == token) {

     // make another API call to get a token and save it
     // stop execution of the rest of this method until the
     // above API call is returned.
     [tokenManager requestTokenCompletionHandler:^(BOOL success, NSString *token){
         if (success) {
           //Do the makeGetForTweetsRequestThatRequiresToken stuff

         } else {
           NSLog(@"Token Error");
         }
     }];
  } else {
    //You have a token, just Do the makeGetForTweetsRequestThatRequiresToken stuff
  }
}