我想知道是否有可能通过AFNetworking避免重复的HTTP请求。具体来说,我的应用程序可能会生成多个HTTP请求,它们都具有相同的URL。我想阻止AFNetworking处理同一网址的重复。通过AFNetworking避免重复的HTTP请求
我不确定这是否可以在AFNetworking或底层的iOS sdk中完成。据我所知,我可以手动保留待处理url请求的trac,并避免重复的方式,但想知道是否有一个较低级别的功能已经可以照顾到这一点。
谢谢。
我想知道是否有可能通过AFNetworking避免重复的HTTP请求。具体来说,我的应用程序可能会生成多个HTTP请求,它们都具有相同的URL。我想阻止AFNetworking处理同一网址的重复。通过AFNetworking避免重复的HTTP请求
我不确定这是否可以在AFNetworking或底层的iOS sdk中完成。据我所知,我可以手动保留待处理url请求的trac,并避免重复的方式,但想知道是否有一个较低级别的功能已经可以照顾到这一点。
谢谢。
我做了一个类别,在制作新的GET请求之前检查进行中的GET请求。
https://github.com/NSElvis/AFHTTPSessionManager-AFUniqueGET
它通过使用该方法的会议getTasksWithCompletionHandler
做到这一点。
最好的办法是继承AFHTTPRequestOperationManager的HTTP请求操作的子类并在那里跟踪它们,如果你想以同样的方式为每个请求跟踪请求,否则逻辑将需要在别处。
AFNetworking不支持这一点,因为有可能是一些相关的时候,你应该和逻辑时,你不应该执行重复的请求,这将是高度可定制的(没有足够的通用的框架)
我一样的问题。我有一个聊天应用程序,我需要为每条消息显示用户头像。所以我提出了几个相同的要求,我已经解决了这个问题。 首先,我想补充NSDictionary
与NSString
头像的URL键和结束块对象:
@property (strong, nonatomic) NSMutableDictionary* successBlocksDictForGetAvatar;
这是我的方法来获取用户的头像图片:
- (void)getAvatarForUser:(ETBUser*)user
completion:(void(^)())completionBlock
{
if (user.avatarURL)
{
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:user.avatarURL]];
if (self.successBlocksDictForGetAvatar[user.avatarURL])
[self.successBlocksDictForGetAvatar[user.avatarURL] addObject:completionBlock];
else
{
NSMutableSet* set = [[NSMutableSet alloc] initWithObjects:completionBlock, nil];
[self.successBlocksDictForGetAvatar setObject:set forKey:user.avatarURL];
AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
UIImage* avatarImage = [UIImage imageWithData:responseObject];
if (avatarImage)
{
user.avatar = avatarImage;
[[DataManager shared] saveAvatar];
[((NSSet*)self.successBlocksDictForGetAvatar[user.avatarURL]) enumerateObjectsUsingBlock:^(void(^successBlock)(), BOOL *stop) {
successBlock();
}];
[self.successBlocksDictForGetAvatar removeObjectForKey:user.avatarURL];
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[self.successBlocksDictForGetAvatar removeObjectForKey:user.avatarURL];
}];
[self.manager.operationQueue addOperation:operation];
}
}
}
这里检查我的词典中包含的请求。如果是,我在词典中为用户添加完成块。否则我setObject:forKey:
和AFNetworking
请求。在成功和失败块我清理我的字典。
P.S.这里是我的经理getter:
- (AFHTTPRequestOperationManager*)manager
{
if (!_manager)
{
_manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:kBaseURL];
[_manager.requestSerializer setValue:NetworkConstantsHeaderAcceptValue forHTTPHeaderField:NetworkConstantsHeaderAcceptKey];
[_manager.operationQueue setMaxConcurrentOperationCount:1];
}
return _manager;
}
这很好,但需要AF 2.0。 ResktKit被困在1.3。哎呀 – Vaiden