iOS NSURLSession的坑(The data coul

2018-09-03  本文已影响12人  突刺刺

简介

#pragma mark - 网络请求测试
- (void)test{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:delegateObject delegateQueue:[NSOperationQueue mainQueue]];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:@"api.com"];
    request.HTTPBody = para//请求数据
    NSURLSessionTask *task = [session dataTaskWithRequest:request];
    [task resume];
}
#pragma mark - NSURLSessionDelegate method
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    DeLog(@"1。 %s",__FUNCTION__);
    completionHandler(NSURLSessionResponseAllow);
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    NSError *error;
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.recevieData options:NSJSONReadingMutableLeaves error:&error];
        if (error)
        {
            NSLog(@"initSDK error === %@",error.localizedDescription);
        }
}
-(void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error{
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
{
    [session finishTasksAndInvalidate];
}

打印结果:
initSDK error === The data couldn’t be read because it isn’t in the correct format

分析

解决

#pragma mark - NSURLSessionDelegate method
#pragma mark - 设置一个全局变量,接收data
NSMutableData *_data;
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
     if(_data)
   {
     _data = [[NSMutableData alloc] init];
   }
     [_data appendData:data];
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
{
    #pragma这里取的_data,就可以得到完整的json
     NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableLeaves error:&error];
    [session finishTasksAndInvalidate];
}
上一篇 下一篇

猜你喜欢

热点阅读