我在Objective c中有以下方法:
- (BOOL) authorize {
OauthObject* oauthObj = [OauthObject sharedManager];
[[Manager sharedManagerServerRequest] authorize:(oauthObj) and:login.text withPassword:password.text completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", error);
if(error == NULL && data != nil) {
self.requestSuccessfull = YES;
} else {
//NSLog(@"Error: %@", error);
// Display error
}
}];
return self.requestSuccessfull;
}
在此函数内部,方法authorize
向服务器请求并在块中返回数据。
问题是- (BOOL) authorize
返回的速度更快return self.requestSuccessfull
,并且始终为FALSE。
答案 0 :(得分:2)
此请求是异步的,因此您应该使用block进行回调。您可以将代码更改为:
$this->
你可以像这样使用:
- (void)authorize:(void (^)(BOOL result))completionHanlder {
OauthObject* oauthObj = [OauthObject sharedManager];
[[Manager sharedManagerServerRequest] authorize:(oauthObj) and:login.text withPassword:password.text completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", error);
if(error == NULL && data != nil) {
completionHanlder(YES);
} else {
completionHanlder(NO);
//NSLog(@"Error: %@", error);
// Display error
}
}];
}
希望这有帮助!