对于具有相同响应的相同请求,NSURLSession didReceiveData连续调用

时间:2017-09-14 10:00:09

标签: ios nsurlsession nsurlsessiondatatask

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
}

重复调用上面的委托方法,以便不调用下面的委托方法,因此应用程序被挂起。

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(nullable NSError *)error
{
}

用于创建NSURLSessionDataTask的方法

-(void)fetchDataAboveiOS7:(NSMutableURLRequest*)request :(void(^)(NSURLResponse *response, NSData *data, NSError *error))completionHandler
{
    __block NSURLSessionDataTask *task;

    task = [[self getSessionConfiguration] dataTaskWithRequest:request];

    __block  NSMutableArray *networkError;
    if (!networkError) {
        networkError = [[NSMutableArray alloc]init];
    }

    [task setTaskDescription:[request allHTTPHeaderFields][kTempId]];
    [task resume];
}

-(NSURLSession *)getSessionConfiguration {

    if (self.session) {
        return self.session;
    }

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.timeoutIntervalForRequest = kRequestTimeOut;
    config.allowsCellularAccess = YES;
    config.HTTPMaximumConnectionsPerHost = kMaximumConnectionPerHost;
    config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
    self.session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    return self.session;
}

用于创建NSURLRequest的附加代码,此对象被发送到fetchDataAboveiOS7

NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:_url
                                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                     timeoutInterval:timeOutInterval];

    /*method*/
    [request setHTTPMethod:method];

    if (self.sessionCookie != nil) {
        [request setValue:self.sessionCookie forHTTPHeaderField:kCookie];
    }

NSMutableDictionary *headerDict = [[NSMutableDictionary alloc] init];
        [headerDict setValue:@"application/json;charset=UTF-8" forKey:@"Accept"];
        [headerDict setValue:@"application/json;charset=UTF-8" forKey:@"Content-Type"];


        for (NSString *key in [headerDict allKeys])
        {
            [request addValue:[headerDict valueForKey:key] forHTTPHeaderField:key];
        }

        if (bodyDict)
        {
            [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:bodyDict
                                                                 options:kNilOptions error:&error]];
        }

[self fetchDataAboveiOS7:request :^(NSURLResponse *response, NSData *data, NSError *error) {

}];

0 个答案:

没有答案