JAK
JAK

Reputation: 6471

Multiple ASIFormDataRequest response handle in ios

I am using ASIFormDataRequest framework for using server side request and response. I don’t want use request and response method each view controller class. I want to use a separate singleton class for service handling function,then that class fires service success and failure properly. I implemented this idea in my ios project.

But multiple request done by at a time,then I can’t get proper response for which I requested one. Please go through my following code.In this code I am using a custom delegate in my service handle class. I think when multiple request done by at a time, this custom delegate method may be changed.

Note: At a time multiple request from different view controllers.

ServiceHandle.h

@protocol serviceDelegate <NSObject>

     -(void)successFullResponse:(ASIHTTPRequest *)req;
     -(void)failedResponse:(ASIHTTPRequest *)req;
@end

@interface ServiceHandle : NSObject
@property(nonatomic,strong)NSOperationQueue *queue;
@property (nonatomic,weak)id<serviceDelegate>delegate;

+ (id)sharedInstance;
-(void)loginWithUserName:(NSString *)userName;
-(void)userReg:(NSDictionary*)userDict;

@end

ServiceHandle.m

 static ServiceHandle *sharedInstance = nil;

 @implementation ServiceHandle
 @synthesize delegate,queue;

+(ServiceHandle *)sharedInstance{

if (sharedInstance == nil) {

    sharedInstance = [[super allocWithZone:NULL]init];
}
return sharedInstance;
}
 - (id)init
{
   self = [super init];

   if (self) {
    // Work your initialising magic here as you normally would
}
return self;
}


-(void)loginWithUserName:(NSString *)userName{

if (![self queue]) {
    [self setQueue:[[NSOperationQueue alloc] init]];
}

NSString *path=[NSString stringWithFormat:@"%@userLogin",webserviceURL];

NSString *lattitude=[[NSUserDefaults standardUserDefaults] objectForKey:@"mylatitude"];
NSString *longitude=[[NSUserDefaults standardUserDefaults] objectForKey:@"mylongitude"];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:path]];
 [request setTimeOutSeconds:30];
[request setPostValue:userName forKey:@"userId"];
[request setPostValue:lattitude forKey:@"latitude"];
[request setPostValue:longitude forKey:@"longitude"];
[request setShouldContinueWhenAppEntersBackground:YES];
[request setDidFinishSelector:@selector(requestSuccess:)];
[request setDidFailSelector:@selector(requestFail:)];
request.queuePriority = NSOperationQueuePriorityHigh;
request.delegate = self;

[[self queue]addOperation:request];
}

-(void)requestSuccess:(ASIHTTPRequest *)request{

  if ([self.delegate respondsToSelector:@selector(successFullResponse:)]) {

    [self.delegate successFullResponse:request];
  }
}

 -(void)requestFail:(ASIHTTPRequest *)request{

if ([self.delegate respondsToSelector:@selector(failedResponse:)]) {

    [self.delegate failedResponse:request];
  }
}

ViewController.m

-(IBAction)clickLogin:(id)sender{

     ServiceHandle *sharedObj = [ServiceHandle sharedInstance];
     sharedObj.delegate = self;
     [sharedObj loginWithUserName:@“usrName”];
 }

-(void)successFullResponse:(ASIHTTPRequest *)req{

    NSString *responseString = [req responseString];
    NSLog(@"responseString is%@",responseString);
    NSDictionary *responseDict = [responseString JSONValue];
    NSLog(@"dict is :%@",responseDict);
  }
-(void)failedResponse:(ASIHTTPRequest *)req{


  }

Upvotes: 1

Views: 363

Answers (0)

Related Questions