我正在努力更新旧的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的缺陷吗?