主线程中的 return 变量如何作为回调?
How return variable in main thread like as callback?
我在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
向服务器请求和块中的 returns 数据。
问题是 - (BOOL) authorize
returns 更快 return self.requestSuccessfull
并且它总是 FALSE。
这个请求是异步的,所以你应该使用块来回调。您可以将代码更改为:
- (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
}
}];
}
你可以这样使用:
[yourInstance authorize:^(BOOL result) {
//user result here.
}];
希望对您有所帮助!
我在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
向服务器请求和块中的 returns 数据。
问题是 - (BOOL) authorize
returns 更快 return self.requestSuccessfull
并且它总是 FALSE。
这个请求是异步的,所以你应该使用块来回调。您可以将代码更改为:
- (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
}
}];
}
你可以这样使用:
[yourInstance authorize:^(BOOL result) {
//user result here.
}];
希望对您有所帮助!