NSURLSession重定向处理程序在WatchOS上的不同行为

时间:2018-05-01 01:20:21

标签: ios watchkit nsurlsession

我正在努力更新旧的WatchOS应用程序以支持WatchOS 4.0。该应用程序发出一些网络请求,其中一个响应302重定向状态代码和相应的Location标头。我不想遵循重定向,302响应头包含我对此特定请求所需的所有信息。

我正在使用NSURLSession并已实施委托方法- URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:

委托方法按预期调用,在其中我调用completionHandler(nil)告诉操作系统不要遵循重定向。到目前为止一切都很好。

此时NSURLSessionTask完成处理程序通常会在请求取消错误之后立即被调用,这也很好。

这是奇怪的部分。当Apple Watch与iPhone配对时,我会得到上述行为。然而,当我将iPhone置于飞行模式以模拟Watch超出范围时,网络请求直接通过wifi或蜂窝网络进行,我得到了不同的行为。

仍然会按预期调用重定向委托方法,但不会立即调用NSURLSessionTask完成处理程序。相反,它会在一段时间后调用-1001 Request Timed Out错误。

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];

NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    // Odd behaviour described above here
}];

[task resume];

委托重定向方法:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler {
    completionHandler(nil);
}

由于我无法通过Xcode进行调试而无法找到代理监视网络请求的方法,因此难以调试到这一点。

有没有人经历过这种行为,或者有任何关于它为什么表现不同的线索?这是WatchOS的缺陷吗?

0 个答案:

没有答案