У меня есть текстовое поле, когда пользователь вводит символ, я добавляю этот символ к своему URL и получаю ответ. Мне нужно отменить предыдущий запрос. Например, если я нахожу «шампунь» Я буду поражать сервер 7 раз, и мне нужно отменить последний запрос. В настоящее время я использую [manager.operationQueue cancelAllOperations]; Но некоторые, как это не работает для меня. Возможно, я не разместил его правильно.Отменить предыдущий запрос AFHTTPSessionManager
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
//[self.s_searchResultText setHidden:YES];
// [SVProgressHUD dismiss];
[self.s_tableView setHidden:true];
[searchProductArray removeAllObjects];
[self.s_tableView reloadData];
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:UNACCEPTABLE_CHARACTERS] invertedSet];
NSLog(@"%@",cs);
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
NSLog(@"%@",filtered);
NSLog(@"%lu",(unsigned long)filtered.length);
if (filtered.length) {
[CustomToastAlert showToastInParentView:self.view withText:@"Please enter valid characters" withDuaration:1.5];
return NO;
}
searchTextString = [textField.text stringByAppendingString:string];
NSLog(@"%lu",(unsigned long)[searchTextString length]);
NSLog(@"%@",searchTextString);
int stringLength=[searchTextString length];
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
stringLength=[searchTextString length];
stringLength=[searchTextString length]-1;
searchTextString=[searchTextString substringToIndex:stringLength];
NSLog(@"Backspace was pressed");
NSLog(@"string is %@",searchTextString);
}
if(stringLength>=3)
{
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSString *urlString=[NSString stringWithFormat:kSearchProductUrl,kBaseUrl];
urlString = [urlString stringByAppendingString:searchTextString];
urlString = [urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSLog(@"%@",searchTextString);
NSLog(@"%@",urlString);
[searchProductArray removeAllObjects];
// [manager invalidateSessionCancelingTasks:NO];
//[manager.operationQueue cancelAllOperations];
[manager GET:urlString parameters:nil success:^(NSURLSessionDataTask *task, id responseObject)
{
[searchProductArray removeAllObjects];
//[SVProgressHUD showWithStatus:LOADING_ITEMS maskType:SVProgressHUDMaskTypeGradient];
NSLog(@"JSON: %@", responseObject);
json= responseObject;
NSLog(@"%@",json);
NSLog(@"%lu",(unsigned long)[[json valueForKeyPath:@"data"] count ]);
for(int i=0;i<[[json valueForKeyPath:@"data"]count ];i++)
{
Product *s_productList=[[Product alloc]init];
s_productList.SKU_Name=[[json valueForKeyPath:@"data.sku_name"]objectAtIndex:i];
s_productList.SKU_Id=[[json valueForKeyPath:@"data.sku_id"]objectAtIndex:i];
s_productList.SKU_Price=[[json valueForKeyPath:@"data.sku_price"]objectAtIndex:i];
s_productList.SKU_OfferPrice=[[json valueForKeyPath:@"data.sku_offer_price"]objectAtIndex:i];
s_productList.SKU_Currency = RUPEE_SYMBOL;
s_productList.SKU_AvailableUnit=[[json valueForKeyPath:@"data.sku_available_unit"]objectAtIndex:i];
s_productList.SKU_OfferDescription= [[json valueForKeyPath:@"data.sku_offer_desc"]objectAtIndex:i];
s_productList.SKU_ImageUrls=[[json valueForKeyPath:@"data.sku_image_urls"]objectAtIndex:i];
[searchProductArray addObject:s_productList];
NSLog(@"%lu",(unsigned long)[searchProductArray count]);
}
[self.s_tableView setHidden:FALSE];
[self.s_tableView reloadData];
NSLog(@"%lu",(unsigned long)[searchProductArray count]);
if ([searchProductArray count]==0) {
[CustomToastAlert showToastInParentView:self.view withText:SEARCH_RESULT withDuaration:1.5];
}
}
failure:^(NSURLSessionDataTask *task, NSError *error)
{
[CustomToastAlert showToastInParentView:self.view withText:NO_DATA_AVAIL withDuaration:1.5];
}];
}
return YES;
}
Не могли бы вы высказать недостающую часть, где вы написали «введите код здесь», чтобы другие могли видеть ваше нерабочее решение в настоящее время, чтобы лучше ответить? – gaborous
Обновлен мой код. –