Search code examples
ioscompletionhandlernsurlsessiondatatask

nsurlsessiondatatask returns nil while sending a post request to REST based url ios


-(void)showData {
NSError *error;

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *url = [NSURL URLWithString:@"https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
NSDictionary *mapData = [[NSDictionary alloc] initWithObjectsAndKeys: @"1", @"number",nil];
NSData *postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error];
[request setHTTPBody:postData];


NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    if(error == nil)
    {
        NSString *text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
        NSLog(@"Data = %@",text);
    }




    NSLog(@"data is %@", data );
    NSLog(@"response is %@" , response);
}];
[postDataTask resume];
}

when i execute the code the debugger jumps from the NSURLSessionDataTask and log generated is __NSCFLocalDataTask: 0x7ff061751960>{ taskIdentifier: 1 } { suspended } and does not come any data in NSData and NSResponse.


Solution

  • @interface UrClass:NsObject<NSURLConnectionDelegate>{    NSMutableData *_receivedData;
    }
    
    -(void)showData{  
    NSString * urlStr = [NSString stringWithFormat:@"%@", path];
        NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc] init];
    
        [theRequest setURL:[NSURL URLWithString:urlStr]];
    
    
            NSString *requestStr = [dictionary JSONRepresentation];
            NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
            NSString *postLength = [NSString stringWithFormat:@"%d", (unsigned int)[requestData length]];
            [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
            [theRequest setHTTPBody:requestData];
    
            [theRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [theRequest setHTTPMethod:@"POST"];
        [theRequest setTimeoutInterval:REQUEST_TIME_OUT_SECS];
    
        NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:NO];
        [theConnection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                              forMode:NSDefaultRunLoopMode];
    
        [theConnection start];
        if (theConnection)
            _receivedData = [NSMutableData data];
    }
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        [_receivedData setLength:0];
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [_receivedData appendData:data];
    }
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    }