在AFNetworking的同一线程中执行某些操作
问题描述:
我正在使用Objective-C。我们知道AFNetworking正在另一个线程中工作,但如果我想在互联网请求后做些什么呢。在AFNetworking的同一线程中执行某些操作
例如:
- (BOOL)checkPassword
{
self.loginPermit = NO;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
NSDictionary *parameters = @{@"username": self.username, @"password": self.password};
[manager POST:self.URL parameters:parameters progress:nil
success:^(NSURLSessionDataTask *task, id responseObject)
{
NSDictionary *dict = (NSDictionary *)responseObject;
if ([[dict objectForKey:@"msg"] isEqualToString:@"00001"]){
self.loginPermit = YES
}
else {
self.loginPermit = NO;
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
return self.loginPermit;
}
但它不会返回每一次。如何在互联网请求后返回该值。
答
您应该为此使用块。
[self checkPassword:^(BOOL loginPermit) {
if(loginPermit){
// do your stuff
}
}];
- (void)checkPassword:(void(^)(BOOL loginPermit))completion
{
BOOL loginPermit = NO;
// show indicator
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
NSDictionary *parameters = @{@"username": self.username, @"password": self.password};
[manager POST:self.URL parameters:parameters progress:nil
success:^(NSURLSessionDataTask *task, id responseObject)
{
//hide indicator
NSDictionary *dict = (NSDictionary *)responseObject;
if ([[dict objectForKey:@"msg"] isEqualToString:@"00001"]){
loginPermit = YES;
}
else {
loginPermit = NO;
}
completion (loginPermit);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
//hide indicator
completion (loginPermit);
}];
}
+0
我应该用__block声明loginPermit BOOL loginPermit; –
+0
是的,你可以做到。 – iOSEnthusiatic
您需要在完成块中做任何事情 - 在这里设置'loginPermit'属性。可能最好的方法是将一个块传递给checkPassword方法而不是让checkPassword返回一个Bool – Paulw11