我希望调用一个方法,该方法将从其完成处理程序返回一个值。该方法是异步执行的,我不想在方法体的所有内容执行之前返回值。以下是一些有问题的代码,以说明我的目标:
:
// This is the way I want to call the method
NSDictionary *account = [_accountModel getCurrentClient];
// This is the faulty method that I want to fix
- (NSDictionary *)getCurrentClient
{
__block NSDictionary *currentClient = nil;
NXOAuth2Account *currentAccount = [[[NXOAuth2AccountStore sharedStore] accounts] lastObject];
[NXOAuth2Request performMethod:@"GET"
onResource:[NSURL URLWithString:[NSString stringWithFormat:@"%@/clients/%@", kCatapultHost, currentAccount.userData[@"account_name"]]]
usingParameters:nil
withAccount:currentAccount
sendProgressHandler:nil
responseHandler:^ (NSURLResponse *response, NSData *responseData, NSError *error) {
NSError *jsonError;
currentClient = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
}];
return currentClient;
}
我不希望getCurrentClient
方法在NXOAuth2Request
完成之前返回值。也不能在请求的响应处理程序中返回当前客户端。那么我的选择是什么?
getCurrentClient
返回一个值并且有一个完成处理程序?返回的值可能是:return handler(deserializedDict)。 - Robert AudigetCurrentClient
返回的是实际异步请求完成之前的数据。你需要更新你的结构,支持在使用getCurrentClient
时使用回调函数而不是返回值。 - Tim