Bernard
Bernard

Reputation: 4590

How to return a value from a method by delay?

I have a framework and a project. My framework is responsible for web services.

From Project user insert username and password. Then it passes these parameters by calling sendLogin method inside the framework.

Inside framework it takes a while to check and validate username and password. If username and password are correct it will get a token number from server.

Until here everything works fine. But I want to know how to send this token back to main program?

I tried completion method but I failed. Here is definition:

Project:

- (IBAction)bankLoginPressed:(id)sender
{
    [registerUser sendLogin:^(NSInteger *accessCode){

        NSLog(@"access code ==  %tu ",accessCode);

    }];
}

Inside framework

typedef void (^HttpCompletionBlock) (NSInteger *);

-(void) sendLogin :(HttpCompletionBlock)completionHandler
{
    NSString *string = @"https://myserver/customer_authentication";
    NSDictionary *parameters = @{@"member_id": @"1234", @"access_code": @"password", @"device_id":@"874627864"};

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager POST:string parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) {

        NSLog(@"JSON: %@", responseObject);
        if (responseObject[@"secret_token"])
        {

            NSLog(@"Secret is=    %@",responseObject[@"secret_token"]);
            //Here I needd to send back token number????

        }
    }
          failure:^(NSURLSessionTask *operation, NSError *error)
     {
         NSLog(@"Error: %@", error);
     }];
}

Upvotes: 1

Views: 91

Answers (1)

Monish
Monish

Reputation: 622

typedef void (^HttpCompletionBlock)     (NSString *token, NSError *error);

-(void) sendLogin :(HttpCompletionBlock)completionHandler
{
    NSString *string = @"https://myserver/customer_authentication";
    NSDictionary *parameters = @{@"member_id": @"1234", @"access_code": @"password", @"device_id":@"874627864"};

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager POST:string parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) {

    NSLog(@"JSON: %@", responseObject);
    if (responseObject[@"secret_token"])
    {

        NSLog(@"Secret is=    %@",responseObject[@"secret_token"]);
        //Here I needd to send back token number????
        return completionHandler(responseObject[@"secret_token"],nil);

      }
    }
      failure:^(NSURLSessionTask *operation, NSError *error)
      {
          NSLog(@"Error: %@", error);
          return completionHandler(nil,error);
      }];
}

- (IBAction)bankLoginPressed:(id)sender
{
    [registerUser sendLogin:^(NSString *token, NSError *error){
        if(error == nil)
        {
            NSLog(@"access code ==  %@ ",token);
        }
        else
        {       
            NSLog(@"Error ==  %@ ",error);
        }

    }];
}

Upvotes: 2

Related Questions