NSURLSession线程在macOS 10.12中有变化吗?

问题描述 投票:1回答:1

我已经让这段代码工作了大约12个月,并且今天尝试进行一些无关的更改,首次使用Xcode 9构建这个macOS应用程序。从主视图控制器init中调用时,代码可以正常工作,但每隔一段时间就会因超时而失败。但是,服务器从不记录第二次和后续调用。我已经检查过最后一个Xcode 8版本是否仍在工作,所以我认为这是对线程的一些改变?

+ (void) postRequest:(NSString *)url withContentType:(NSString *)contentType body:(NSData *)body onCompletion:(void (^)(BOOL success, NSDictionary *json, NSError *error))onCompletion
{
    NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    postRequest.HTTPMethod = @"POST";
    [postRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];
    postRequest.HTTPBody = body;
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:postRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSDictionary *json = ( data != nil ) ? [NSJSONSerialization JSONObjectWithData:data options:0 error:nil] : [NSDictionary dictionary];
        BOOL success = !error && ![[json valueForKey:ERROR] integerValue];
        onCompletion( success, json, error);
    }];
    [dataTask resume];
}

我认为这些操作是故意放在后台线程上的,但我对如何实现这一目标感到茫然。将它放在不同点的主线程上没有任何效果。

我不知道它是否相关,但我使用自定义NSURLProtocol来插入授权头,另一个区别是每次调用时协议被多次调用,而以前只调用一次。

objective-c xcode multithreading
1个回答
0
投票

它就像更换线一样简单:

NSURLSession *session = [NSURLSession sharedSession];

有:

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
© www.soinside.com 2019 - 2024. All rights reserved.