我想知道是否有可能通過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