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

620 views Asked by At
-(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.

2

There are 2 answers

0
Tabish Sohail On BEST ANSWER
@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 {
}
0
Dharmesh Dhorajiya On

Try this code:

NSURL *url=[NSURL URLWithString:@"https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts"];
NSData *contactData=[NSData dataWithContentsOfURL:url];
NSMutableArray *allContectData=[NSJSONSerialization JSONObjectWithData:contactData options:0 error:nil];
NSLog(@"%@",allContectData);

Otherwise use this code

-(void)showData{

    NSString *urlString = @"https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts";
NSURL *url = [NSURL URLWithString:urlString];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NO timeoutInterval:20.0f];
responseData = [[NSMutableData alloc] init];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
}

use NSURLConnectionDataDelegate Delegate Method

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
     NSMutableArray *allContectData=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
     NSLog(@"%@",allContectData);
}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"%@",error);
}