iOS - 缓存请求及其在NSMapTable中的完成处理程序

时间:2018-06-18 05:47:44

标签: ios objective-c afnetworking objective-c-blocks nsmutableurlrequest

如果出现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 -->

提前致谢。

0 个答案:

没有答案