在AFNetworking的同一线程中执行某些操作

在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; 
} 

但它不会返回每一次。如何在互联网请求后返回该值。

+0

您需要在完成块中做任何事情 - 在这里设置'loginPermit'属性。可能最好的方法是将一个块传递给checkPassword方法而不是让checkPassword返回一个Bool – Paulw11

您应该为此使用块。

[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