я называю GET API, который принимает строку ключевое слово и возвращает мне данные в формате JSON, который я синтаксический анализ и отображение в моем UITableViewКак отображать UIActivityIndicatorView, когда данные JSON асинхронно заполняются в UITableView?
Хотя возвращает данные API, я отображая UIActivityIndicatorView, это работает отлично. Однако, как только данные будут получены, UIActivityIndicatorView исчезнет, как ожидалось, но данные не отображаются в UITableView, но если я прикасаюсь в любом месте экрана, данные становятся видимыми в пользовательском интерфейсе TableView.
Это мой код:
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[indicator startAnimating];
indicator.hidesWhenStopped = YES;
dispatch_queue_t queue = dispatch_queue_create("ID", NULL);
dispatch_async(queue, ^{
NSString *searchText=searchBar.text;
NSString *trimmedString = [searchText stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
if (trimmedString.length==0) {
isFilter=NO;
UIAlertView *noConn = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"Please enter something in search bar" delegate:self cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
[noConn show];
} else {
NSString *searchNew = [trimmedString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
isFilter=YES;
@try {
[label removeFromSuperview];
_Title1 = [[NSMutableArray alloc] init];
_Author1 = [[NSMutableArray alloc] init];
_Images1 = [[NSMutableArray alloc] init];
_Details1 = [[NSMutableArray alloc] init];
_link1 = [[NSMutableArray alloc] init];
_Date1 = [[NSMutableArray alloc] init];
NSString* myURLString = [NSString stringWithFormat:@"www.example.com=%@", searchNew];
NSURL *url = [NSURL URLWithString:myURLString];
NSData* data = [NSData dataWithContentsOfURL:url];
if ((unsigned long)data.length > 3) {
NSArray *ys_avatars = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if(ys_avatars) {
for (int j=0;j<ys_avatars.count;j++) {
if(ys_avatars[j][@"title"]==[NSNull null]) {
[_Title1 addObject: @""];
} else {
[_Title1 addObject:ys_avatars[j][@"title"]];
}
if(ys_avatars[j][@"author"]==[NSNull null]) {
[_Author1 addObject: @""];
}
[_Author1 addObject: ys_avatars[j][@"author"]];
if(ys_avatars[j][@"featured_img"]==[NSNull null]) {
[_Images1 addObject: @""];
} else {
[_Images1 addObject: ys_avatars[j][@"featured_img"]];
}
if(ys_avatars[j][@"content"]==[NSNull null]) {
[_Details1 addObject: @""];
} else {
[_Details1 addObject:ys_avatars[j][@"content"]];
}
if(ys_avatars[j][@"permalink"]==[NSNull null]) {
[_link1 addObject: @""];
} else {
[_link1 addObject:ys_avatars[j][@"permalink"]];
}
if(ys_avatars[j][@"date"]==[NSNull null]) {
[_Date1 addObject: @""];
} else {
NSString *newStr=[ys_avatars[j][@"date"] substringToIndex:[ys_avatars[j][@"date"] length]-3];
[_Date1 addObject:newStr];
}
}
} else {
NSLog(@"error");
}
[self.myTableView reloadData];
} else {
if(IDIOM == IPAD){
[self.myTableView reloadData];
self.tableView.separatorColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0];
label = [[UILabel alloc] initWithFrame:CGRectMake(150, 200, 200, 100)];
[email protected]"No Article Found";
label.backgroundColor = [UIColor clearColor];
[self.view addSubview:label];
} else {
[self.myTableView reloadData];
self.tableView.separatorColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0];
label = [[UILabel alloc] initWithFrame:CGRectMake(90, 100, 200, 100)];
[email protected]"No Article Found";
label.backgroundColor = [UIColor clearColor];
[self.view addSubview:label];
}
}
}
@catch (NSException *exception) { }
}
dispatch_async(dispatch_get_main_queue(), ^{
[indicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];
});
});
[self.mySearchBar resignFirstResponder];
}
большое спасибо, его работа абсолютно прекрасна. Это именно то, что я искал. – Daljeet
еще раз спасибо за этот ответ, у меня есть еще один запрос, пожалуйста, помогите мне. вот ссылка: http://stackoverflow.com/questions/25838122/json-data-is-not-loading-in-slow-internet-connection – Daljeet