如果出现auth错误,我们将失败的请求存储在NSMapTable的缓存中,键为NSMutableUrlRequet,值为完成处理程序,具有以下选项。
NSEnumerator *enumerator = [cachedRequest keyEnumerator];
id request;
while ((request = [enumerator nextObject])) {
NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error){
void (^completionHandler)(NSURLResponse *response, id responseObject, NSError *error) =[cachedRequest objectForKey:request];
completionHandler(response, responseObject, error);
//Remove the request from cache.
[cachedRequest removeObjectForKey:request];
}];
[task resume];
}
虽然我们无法在本地重现它,但我们正面临着一种奇怪的崩溃。崩溃指向我们重试缓存请求并调用完成处理程序的代码。以下是用于重试失败请求的代码。
#0
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000010
以下是我们在使用响应调用completionHandler的行中获得的异常。
<a class="cd-go">
<img class="scroll-swipe" src="<?php bloginfo('template_directory'); ?>/img/scroll_down_arrow.svg">
</a><!-- scroll btn -->
提前致谢。