在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
}
答案 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
}
}