gpt4 book ai didi

ios - 使用iOS中的AFNetworking,确定故障响应是服务器错误还是连接错误的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 16:35:14 25 4
gpt4 key购买 nike

使用iOS中的AFNetworking,确定故障响应是服务器错误还是连接错误的最佳方法是什么?

例如,如果由于连接错误导致上传失败,我可能要在一段时间后自动重试上传。相反,如果由于服务器错误导致上传失败,我将希望永久停止尝试该请求。 (我不想重试的错误最多是400和500个错误。)

请告诉我如何最轻松地确定我是否只是看到连接错误或服务器错误?

最佳答案

我使用以下UIImageView类别。尝试在5秒钟延迟后重新加载图像。

h文件:

#import "UIImageView+AFNetworking.h"

@interface UIImageView (ConvenienceAdditions)

- (void)setAutoRetryImageWithURL:(NSURL *)url;
- (void)setAutoRetryImageWithURL:(NSURL *)url completion:(CompletionBlockCommon)block;
- (void)setAutoRetryImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage completion:(CompletionBlockCommon)block;
- (void)setAutoRetryImageWithURLRequest:(NSURLRequest *)urlRequest placeholderImage:(UIImage *)placeholderImage completion:(CompletionBlockCommon)block;

@end

m文件:
#import "UIImageView+ConvenienceAdditions.h"

static NSTimeInterval kDGImageReloadingAttemptInterval = 5;

@implementation UIImageView (ConvenienceAdditions)

- (void)setAutoRetryImageWithURL:(NSURL *)url
{
[self setAutoRetryImageWithURL:url completion:nil];
}

- (void)setAutoRetryImageWithURL:(NSURL *)url completion:(CompletionBlockCommon)block
{
[self setAutoRetryImageWithURL:url placeholderImage:nil completion:block];
}

- (void)setAutoRetryImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage completion:(CompletionBlockCommon)block
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
[self setAutoRetryImageWithURLRequest:request placeholderImage:placeholderImage completion:block];
}

- (void)setAutoRetryImageWithURLRequest:(NSURLRequest *)urlRequest placeholderImage:(UIImage *)placeholderImage completion:(CompletionBlockCommon)block
{
__weak typeof (self) weakImageView = self;
[self setImageWithURLRequest:urlRequest placeholderImage:placeholderImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
__strong __typeof(weakImageView)strongImageView = weakImageView;
if (block){
block(image, nil);
}
else{
strongImageView.image = image;
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
if (error.code == NSURLErrorCancelled){ // Check error's code
return ;
}
else if (response.statusCode >= 400) // Check response's code
{
return;
}
else{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, kDGImageReloadingAttemptInterval * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[weakImageView setAutoRetryImageWithURLRequest:urlRequest placeholderImage:placeholderImage completion:block];
});
}
}];
}

@end

应按以下方式使用:
[someImageView setAutoRetryImageWithURL:someImageURL];

关于ios - 使用iOS中的AFNetworking,确定故障响应是服务器错误还是连接错误的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com