0

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
}
4

1 に答える 1

1

トークンAPIにはコールバックがあると思います。TweetRequestAPIへのコールバックを処理するブロックを登録できます。

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
  }
}
于 2012-12-12T09:39:43.150 に答える