我在2个视图控制器中有2个表视图。当我从第一个屏幕中选择一个单元格时,我想加载第二个表格,但我的问题是:表格为空并在滚动后填充。
这就是我填充表格的方式:
选择单元格时:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSURL *url = [NSURL URLWithString:@"http://privatereisen.com/"];
ProgViewController *cd = [self.storyboard instantiateViewControllerWithIdentifier:@"progidentifview"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSString *path=[NSString stringWithFormat :@"dok/TV/pays/italie/json/chaine%d.json",indexPath.row];
[httpClient postPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
{resultofData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
NSString *valuKey=[NSString stringWithFormat :@"chaine%d",indexPath.row];
NSArray *testArray =[resultofData valueForKey:valuKey];
cd.categ=[[NSArray alloc]initWithArray:testArray];
cd.categArray=[[NSArray alloc]initWithArray:self.categoryArray];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[[[UIAlertView alloc]initWithTitle:@":( " message:@"Pas d'internet !" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]show];
// NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
}];
[self.navigationController pushViewController:cd animated:YES];
[tableView cellForRowAtIndexPath:indexPath].selected = NO;
}
并在ProgViewController中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
cprogCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifproecell"];
cell.heure.text = [[_categ objectAtIndex:indexPath.row]objectForKey:@"horaire_programme"];
cell.type.text = @"";
cell.desc.text = [[_categ objectAtIndex:indexPath.row]objectForKey:@"nom_programme"];
return cell;
}
答案 0 :(得分:1)
一旦异步请求完成,您需要重新加载UITableView
。目前你将UIViewController推送到堆栈上,然后稍后设置它的数据源,所以只有滚动后才能加载单元格。
要解决此问题,请在设置cd.categ
和cd.categArray
后,确保您致电[cd.tableView reloadData]
或categ
或categArray
的设置者致电[self.tableView reloadData]
答案 1 :(得分:1)
太晚了,但我认为你正在处理要在错误的地方显示的数据。在一段时间内,用户体验是看到没有数据的空白屏幕。
将所有数据移动到被推送的控制器中会更好。因此,在您的选择中,创建控制器并将要提取的数据设置为属性。在ProgViewController中,当在viewDidAppear
内部启动提取并激活一个活动指示器,显示它正忙。成功或失败时停止活动指示。成功时,调用self.tableView.reloadData。失败时,提高警报并弹出控制器。
这样一切都被封装和处理在正确的位置,随着内部数据状态的变化,UI会自动更新。
如果你从初始控制器中进行提取,那么你应该显示它的忙,只有在你有结果显示恕我直言后才推新控制器。