iOS 基于AFNetWorking的联想搜索的实现

需求描述:

输入框搜索功能,输入小米,键盘输入按照x-i-a-o-m-i的顺序,而请求是根据输入框内容的变化进行请求,输入框每变化一次就要进行一次请求,直到输入停止,请求的结果列表展示。

关键点:频繁的网络请求,又不能影响下次请求的进行,这就要求当新的请求开始前,1.展示上次请求的结果;2.就是请求还未返回那就直接取消请求直接进行下次请求.

直接上代码,在封装的网络请求工具里,AFHTTPSessionManager在工具类初始化的时候创建,当前任务@property (nonatomic, strong)NSURLSessionDataTask *currentTask;

[_currentTask cancel];为取消当前任务
[_currentManager.operationQueue cancelAllOperations];取消所有任务

- (void)frequentlyPOST:(NSString *)URLString
            parameters:(id)parameters
               success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
               failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
             hudOnView:(UIView *)onView
{
    if (_currentTask) {
        [_currentTask cancel];
        [_currentManager.operationQueue cancelAllOperations];
        [ProgressHUDUtil hideHUD:onView];
    }
    [ProgressHUDUtil showLoadingWithView:onView];

    _currentTask = [_currentManager POST:Append2Str(API_Base, URLString) parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSString *result =[[ NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        [ProgressHUDUtil hideHUD:onView];
        success(task,result);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(task,error);
    }];

}

推荐阅读更多精彩内容