我有Textfield USERNAME。在这里,当用户开始输入时,对于我必须点击服务器的每个字母,检查“用户名可用性”。现在我把它称为前景,所以它卡住了一点点。我无法取消或刷新以前的连接。任何的想法 ?
注意:我正在使用AFNetwork sessionManager。
答案 0 :(得分:2)
如果您使用AFNetworking如下:
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
NSURLSessionDataTask *task = [sessionManager GET:@"http://example.com/resources.json" parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
你可以使用
[task cancel];
如果您使用AFNetworking如下:
AFHTTPRequestOperationManager *operationManager=[AFHTTPRequestOperationManager manager];
requestOperation=[operationManager GET:@"" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
}];
你可以使用
[requestOperation cancel];
答案 1 :(得分:0)
你的方法很好。但在这里我建议一些新的方法。当你打算输入时,每个角色为什么要调用web服务并增加负载。请查看以下建议。
如果您要检查用户名,则应在写完至少3个字母后调用api。因为在那之后,任何单词都可以用作用户名,否则那些就是字符。这完全取决于您正在实施的功能要求。
等到用户停止输入然后只调用web服务。中间是用户连续打字(直到保持一段时间),使用下面的代码取消之前的请求调用web服务。
[NSObject cancelPerformSelectorsWithTarget:self]; [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f];